我一直想弄清楚如何在Swift中將rgb像素數據數組轉換爲UIImage。像素陣列到UIImage Swift
我讓每個像素的RGB數據在一個簡單的結構:
public struct PixelData {
var a: Int
var r: Int
var g: Int
var b: Int
}
我做了我的方式,下面的函數,但由此產生的圖像是不正確:
func imageFromARGB32Bitmap(pixels:[PixelData], width: Int, height: Int)-> UIImage {
let rgbColorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo:CGBitmapInfo = CGBitmapInfo(CGImageAlphaInfo.PremultipliedFirst.rawValue)
let bitsPerComponent:Int = 8
let bitsPerPixel:Int = 32
assert(pixels.count == Int(width * height))
var data = pixels // Copy to mutable []
let providerRef = CGDataProviderCreateWithCFData(
NSData(bytes: &data, length: data.count * sizeof(PixelData))
)
let cgim = CGImageCreate(
width,
height,
bitsPerComponent,
bitsPerPixel,
width * Int(sizeof(PixelData)),
rgbColorSpace,
bitmapInfo,
providerRef,
nil,
true,
kCGRenderingIntentDefault
)
return UIImage(CGImage: cgim)!
}
有關如何正確地將rgb數組轉換爲UIImage的技巧或指導?
這真的很好,但有點冗長。我建議將斷言改爲簡單的'guard'語句,並且使用'guard let'而不是'如果'爲nils。 在我的實現中,我還使用了'UInt'來防止消極的寬度和高度。 – huwr