Я пытался выяснить, как преобразовать массив данных пикселов rgb в UIImage в Swift.Пиксельный массив для 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' вместо 'if'ing для nils. В моей реализации я также использовал 'UInt' для предотвращения отрицательной ширины и высоты. – huwr