我正在 Swift iOS8 中工作,并尝试将 UIImage 转换为 vImage_Buffer 以使用 Accelerate.framework 执行操作。我正在尝试使用 vImageBuffer_initWithCGImage 进行转换,这是我尝试过的代码:
func initvImageBufferwithUIImage (image:UIImage)-> vImage_Buffer{
var CGImg:CGImageRef = sunset.CGImage
var inProvider:CGDataProviderRef = CGImageGetDataProvider(CGImg)
var inBitmapData:CFDataRef = CGDataProviderCopyData(inProvider)
var buffer:vImage_Buffer!
var format:vImage_CGImageFormat = vImage_CGImageFormat(bitsPerComponent: 8, bitsPerPixel: 32, colorSpace: nil, bitmapInfo: CGBitmapInfo.ByteOrderDefault, version: 0, decode: nil, renderingIntent: kCGRenderingIntentDefault)
vImageBuffer_InitWithCGImage(&buffer!, &format, nil , sunset.CGImage, 0)
return buffer
没有编译错误,当我尝试运行它时,我在 vImageBuffer_InitWithCGImage 行上收到“致命错误:在展开可选值时意外发现 nil”。
我不知道为什么会发生这种情况,因为 buffer 和第三个参数(backgroundColor)都是不安全的,并且根据文档应该接受 NULL,对于 UnsafeMutablePointer 来说,它在 swift 中是 nil (如果我错了,请纠正我)。
编辑:
好吧,我至少明白为什么现在会发生。因为我发送了未包装的 &buffer!。但我无法发送 &buffer,因为它说“vImage_buffer!与 vImage_buffer 不同”。
我尝试了所有类型的组合,将缓冲区声明为 vImage_buffer?但我无法让它发挥作用。我基本上只需要分配缓冲区参数以将其传递给 init 函数,但我不知道如何...。请帮忙