我一直想弄清楚如何在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