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
}