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

我正试图自动裁剪上面和下面有多余白色的图像。 我试图遍历图像的像素来find第一个非白色像素设置为从顶部裁剪适当的高度,然后使用最后一个非白色像素作为合适的高度从底部。

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

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

您可以从UIImage的cgImage表示中获取像素。 宽度和高度在UIImage的大小字段中find。 对于每个像素,检查该像素的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 }