2016-10-20 3 views
0

私は、余分な白の色を持つ画像を自動的にトリミングしようとしています。私は、最初の非白ピクセルを見つけて、上から切り抜くのに適切な高さに設定し、最後の白以外のピクセルを適切な高さとして使用して画像を切り取ろうとしています。下。高さ情報を持つUIImageの個々のピクセルを繰り返します。

CGBitmapContextGetDataを使用して個々のピクセルを生成しようとしましたが、ピクセルの高さの情報が失われるように、ピクチャのRGBカラーのみが保持されていることがわかります。

誰もがUIImageの個々のピクセルを繰り返し処理する方法を知っていますが、これらの写真の高さ情報にアクセスできるのは誰ですか?ありがとうございました。

答えて

2

UIImageのcgImage表現からピクセルを取得できます。幅と高さは、UIImageのサイズフィールドにあります。各ピクセルについて、そのピクセルのRGBA値を確認します。それらがすべて255でない場合は、非白色のピクセルです。

func firstNonWhitePixel(image: UIImage) -> CGPoint? { 
     let width = Int(image.size.width) 
     let height = Int(image.size.height) 
     if let cfData = image.cgImage?.dataProvider?.data, let pointer = CFDataGetBytePtr(cfData) { 
      for x in 0..<width { 
       for y in 0..<height { 
        let pixelAddress = x * 4 + y * width * 4 
        if pointer.advanced(by: pixelAddress).pointee != UInt8.max ||  //Red 
         pointer.advanced(by: pixelAddress + 1).pointee != UInt8.max || //Green 
         pointer.advanced(by: pixelAddress + 2).pointee != UInt8.max || //Blue 
         pointer.advanced(by: pixelAddress + 3).pointee != UInt8.max { //Alpha 
         return CGPoint(x: x, y: y) 
        } 
       } 
      } 
     } 
     return nil 
    } 
関連する問題