我使用以下代码来创建ARGB8888映像。这是ARBG8888的正确图像格式,还是应该使用不同的格式。此链接用于创建以下图像格式
guard let imageConversionToCGImage = img.cgImage,
let imageFormat = vImage_CGImageFormat(
bitsPerComponent: 8,
bitsPerPixel: 32,
colorSpace: CGColorSpaceCreateDeviceRGB(),
bitmapInfo: CGBitmapInfo(rawValue: CGImageAlphaInfo.first.rawValue),
renderingIntent: .defaultIntent),
//Source buffer
let sourceBuffer = try? vImage_Buffer(cgImage: imageConversionToCGImage, format: imageFormat, flags: .noFlags),
//ARGBImage
let argb8888CGImage = try? sourceBuffer.createCGImage(format: imageFormat) else { return } ```
我正在使用DataProvider.CFData获取图像数据。这是正确的格式还是我做错了。我应该怎么做才能拿到ARGB的数据。
1条答案
按热度按时间zqry0prt1#
当您将填充的
vImage_CGImageFormat
传递给该初始化式时,vImage将尝试将源映像转换为指定的格式。例如,您可以传递灰度图像格式,例如:并且返回的缓冲区将包含源图像的灰度表示,而不管源图像的格式如何。
如果要根据源映像的格式填充缓冲区,请传递一个空的
vImage_CGImageFormat
并使用vImageBuffer_InitWithCGImage
函数:返回时,
imageFormat
包含源图像的颜色空间和位深度,sourceBuffer
包含图像本身。苹果刚刚发布了
vImage.PixelBuffer
,它为vImage提供了一个SWIFT友好的API。看看init(cgImage:cgImageFormat:pixelFormat:)
。最后,
init(data:width:height:byteCountPerRow:pixelFormat:)
展示了从Core Graphics图像的底层数据创建vImage像素缓冲区的示例。