使用高度信息迭代UIImage的各个像素

时间:2016-10-20 16:59:18

标签: ios image image-processing uikit

我试图自动裁剪在其上方和下方具有无关白色的图像。我试图迭代图像的像素,找到第一个非白色像素,将其设置为从顶部裁剪的适当高度,然后使用最后一个非白色像素作为裁剪的适当高度从底部。

我尝试使用CGBitmapContextGetData生成单个像素,但据我所知,这只保留了图片的RGB颜色,因此丢失了像素高度的信息。

有没有人知道在能够访问这些图片的高度信息的同时迭代UIImage的各个像素的方法?谢谢。

1 个答案:

答案 0 :(得分: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
    }