[英]iOS: How to get pixel data array from CGImage in Swift
我需要从可以是 RGB8、RGB16、GRAYSCALE8 或 GRAYSCALE16 的 CGImage 获取像素数据作为字节数组。 以前的解决方案(例如此解决方案)会产生暗色或失真的图像。
根据您的问题中提供的链接,您可以通过执行以下操作来获取 pixelData
extension UIImage {
func pixelData() -> [UInt8]? {
let size = self.size
let dataSize = size.width * size.height * 4
var pixelData = [UInt8](repeating: 0, count: Int(dataSize))
let colorSpace = CGColorSpaceCreateDeviceRGB()
let context = CGContext(data: &pixelData,
width: Int(size.width),
height: Int(size.height),
bitsPerComponent: 8,
bytesPerRow: 4 * Int(size.width),
space: colorSpace,
bitmapInfo: CGImageAlphaInfo.noneSkipLast.rawValue)
guard let cgImage = self.cgImage else { return nil }
context?.draw(cgImage, in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
return pixelData
}
}
但是,作为开发人员,这里的相关对象是bitmapInfo
和colorSpace
。 根据所提供的信息,您的图像可能会失真或颜色不同。 确切的解决方案将取决于您获取图像的方式以及从图像中提供的配色方案。 您可能只需要处理变量。
我从来没有遇到过使用CGColorSpaceCreateDeviceRGB()
作为我的颜色空间的问题,但我不得不多次更改我的bitmapInfo
,因为我的图像以不同的值出现。
这是引用不同类型位图的位置。 更有可能的是,您只需要CGImageAlphaInfo
一个变体,它可以位于此处。
如有必要,您可以更改颜色空间。 可以在此处找到默认的CGcolorSpace
网页。 但是,您可能可以使用位于此处的默认设置之一
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.