从像素数组问题中获取NSImage(SWIFT) [英] Obtain NSImage from Pixel Array Problems (Swift)
本文介绍了从像素数组问题中获取NSImage(SWIFT)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个像素数组,需要先转换为CGImage,然后再转换为NSImage。我已经尝试了iOS上用于获取aUIImage的代码的这个版本,但我收到了一个错误,我无法处理:CGImageCreate:无效的图像位/像素或字节/行。 致命错误:展开可选值时意外发现空
任何想法,任何帮助都将受到真诚的感谢!谢谢!我将把代码放在这里:
func imageFromPixels(image : CGImage, size:NSSize,pixels: UnsafeMutablePointer<UInt8>, width: Int, height: Int)-> NSImage {
let rgbColorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo:CGBitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.PremultipliedFirst.rawValue)
let bitsPerComponent = CGImageGetBitsPerComponent(image)
let bitsPerPixel = CGImageGetBitsPerPixel(image)
let bytesPerRow = CGImageGetBytesPerRow(image)
var data = pixels
let providerRef = CGDataProviderCreateWithCFData(
NSData(bytes: &data, length: height * width * sizeof(UInt8))
)
let cgim = CGImageCreate(
width,
height,
bitsPerComponent,
bitsPerPixel,
bitsPerRow,
rgbColorSpace,
bitmapInfo,
providerRef,
nil,
true,
.RenderingIntentDefault
)
return NSImage(CGImage: cgim!, size: size)
}
推荐答案
您的新代码比旧代码有更多错误,因此需要进行一些修复:
func imageFromPixels(size: NSSize, pixels: UnsafePointer<UInt8>, width: Int, height: Int)-> NSImage { //No need to pass another CGImage
let rgbColorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo:CGBitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.PremultipliedFirst.rawValue)
let bitsPerComponent = 8 //number of bits in UInt8
let bitsPerPixel = 4 * bitsPerComponent //ARGB uses 4 components
let bytesPerRow = bitsPerPixel * width / 8 // bitsPerRow / 8 (in some cases, you need some paddings)
let providerRef = CGDataProviderCreateWithCFData(
NSData(bytes: pixels, length: height * bytesPerRow) //Do not put `&` as pixels is already an `UnsafePointer`
)
let cgim = CGImageCreate(
width,
height,
bitsPerComponent,
bitsPerPixel,
bytesPerRow, //->not bits
rgbColorSpace,
bitmapInfo,
providerRef,
nil,
true,
.RenderingIntentDefault
)
return NSImage(CGImage: cgim!, size: size)
}
请参阅代码中的注释。
这篇关于从像素数组问题中获取NSImage(SWIFT)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文