回复:从 swift 中的 UIImage/CGImage 获取像素数据作为数组
Re: Get pixel data as array from UIImage/CGImage in swift
此代码适用于我(Swift 2 playground)灰度,加载彩色 .BMP 图像...
Get pixel data as array from UIImage/CGImage in swift
...但是如果我将 bytesPerPixel
更改为 3(或 4)并使用
let colorSpace = CGColorSpaceCreateDeviceRGB()
...代码仍然可以正常运行,但像素值全为零。关于如何解决这个问题有什么建议吗?
您可能忘记了 CGImageAlphaInfo 参数。对于彩色图像,如果假设 bytesPerPixel
为 4,则需要在创建上下文时设置 RGBA(或 ARGB)。以下是没有 alpha 通道的 RGBA 示例。
// RGBA format
let ctx = CGBitmapContextCreate(&data, pixelsWide, pixelsHigh, 8,
bitmapBytesPerRow, colorSpace, CGImageAlphaInfo.NoneSkipLast.rawValue)
根据文档,您有以下选择:
enum CGImageAlphaInfo : UInt32 {
case None
case PremultipliedLast
case PremultipliedFirst
case Last
case First
case NoneSkipLast
case NoneSkipFirst
case Only
}
此代码适用于我(Swift 2 playground)灰度,加载彩色 .BMP 图像...
Get pixel data as array from UIImage/CGImage in swift
...但是如果我将 bytesPerPixel
更改为 3(或 4)并使用
let colorSpace = CGColorSpaceCreateDeviceRGB()
...代码仍然可以正常运行,但像素值全为零。关于如何解决这个问题有什么建议吗?
您可能忘记了 CGImageAlphaInfo 参数。对于彩色图像,如果假设 bytesPerPixel
为 4,则需要在创建上下文时设置 RGBA(或 ARGB)。以下是没有 alpha 通道的 RGBA 示例。
// RGBA format
let ctx = CGBitmapContextCreate(&data, pixelsWide, pixelsHigh, 8,
bitmapBytesPerRow, colorSpace, CGImageAlphaInfo.NoneSkipLast.rawValue)
根据文档,您有以下选择:
enum CGImageAlphaInfo : UInt32 {
case None
case PremultipliedLast
case PremultipliedFirst
case Last
case First
case NoneSkipLast
case NoneSkipFirst
case Only
}