我正在尝试从ARGB原始阵列创建一个UIImage。
首先,我创建一个640x480像素(307200)的数组,并将它们全部设置为红色。
var rgbArray = [Int?](repeating: nil, count: 307200)
for i in 0 ..< 307200 {
rgbArray[i] = 0x00ff0000 // Red pixel
}
现在进行图片转换:
let data = UnsafeMutablePointer(mutating: rgbArray)
let releaseMaskImagePixelData: CGDataProviderReleaseDataCallback = { (info: UnsafeMutableRawPointer?, data: UnsafeRawPointer, size: Int) -> () in
return
}
let provider: CGDataProvider! = CGDataProvider(dataInfo: nil, data: data, size: 307200, releaseData: releaseMaskImagePixelData)
let cgImage = CGImage(
width: 640,
height: 480,
bitsPerComponent: 8,
bitsPerPixel: 32,
bytesPerRow: 2560,
space: CGColorSpaceCreateDeviceRGB(),
bitmapInfo: CGBitmapInfo(rawValue: CGImageAlphaInfo.noneSkipLast.rawValue),
provider: provider,
decode: nil,
shouldInterpolate: true,
intent: .defaultIntent
)
let uiImage = UIImage(cgImage: cgImage!)
结果是这样的图像:
请注意,图像是蓝色而不是红色,还有那些奇怪的垂直线。
我做错了什么?
答案 0 :(得分:0)
我自己回答。
这是因为rgbArray(Int?)的类型,如果我不做它是可选的,它可以正常工作,例如:
var rgbArray = [Int](repeating: 0xffff0000, count: 307200)
我仍然无法理解这种奇怪的行为,但至少我让它发挥了作用。