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

标签 ios image image-processing uikit

我正在尝试自动裁剪上下有多余白色的图像。我正在尝试遍历图像的像素以找到第一个非白色像素以将其设置为从顶部裁剪的适当高度,然后使用最后一个非白色像素作为从顶部裁剪的适当高度底部。

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

有谁知道在能够访问这些图片的高度信息的同时遍历 UIImage 的单个像素的任何方法?谢谢。

最佳答案

您可以从 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
    }

关于ios - 使用高度信息迭代 UIImage 的各个像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40160298/

相关文章:

android - OpenCV:转换MatOfDMatch,MatOfPoint2f,MatOfKeypoint,查找FundamentalMatrix的方法

python - 保存图像文件Python的快速方法

ios - RACDelegateProxy 与 Common Delegate 实现

ios - WhatsApp 如何将他们的图标添加到 iPhone SDK 中的联系人选项卡和收藏夹选项卡中

image - 如何在 Flutter 中将图像转换为文件?

javascript - 有没有办法在浏览器中显示图像而无需在开发人员工具中预览图像?

Xcode 使用苹果 native 框架将原始数据从 8 位/ channel 转换为 16 位/ channel

python - cv2.cornerHarris返回什么?

ios - NSMutableArray 对副本的更改也会导致父 NSMutableArray 的更改

ios - 如何获取didChangeObject :(id)anObject (NSfetchedResultsController)中对象的值