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