ios - 在 Swift ios 中使用 vImageBuffer_initWithCGImage 时出现 "fatal error: unexpectedly found nil while unwrapping an Optional value"

标签 ios image-processing swift uiimage vimage

我正在 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 行上收到“ fatal error :在展开可选值时意外发现 nil”。 我不确定为什么会发生这种情况,因为 buffer 和第三个参数(backgroundColor)都是不安全的,并且根据文档应该接受 NULL,对于 UnsafeMutablePointer 来说,它在 swift 中是 nil (如果我错了,请纠正我)。

编辑: 好吧,我至少明白为什么现在会发生。因为我发送了未包装的 &buffer!。但我无法发送 &buffer,因为它说“vImage_buffer!与 vImage_buffer 不同”。

我尝试了所有类型的组合,将缓冲区声明为 vImage_buffer?但我无法让它发挥作用。我基本上只需要分配缓冲区参数以将其传递给 init 函数,但我不知道如何...。请帮忙

最佳答案

我不知道 vImage 是什么。但从苹果文档来看, vImage_Buffer 是一个结构体,在将其解析为 vImageBuffer_InitWithCGImage 之前,它应该有一个主体,并且该函数将填充该结构体的字段。 您的代码的真正问题是。

var buffer:vImage_Buffer!

上面创建了一个可选值,其默认值为 nil。当打开包装时,它报告为零。因为它是零。您应该创建一个空结构并将其传递给函数。尝试以下一项。

    var buffer:vImage_Buffer = vImage_Buffer()
    ........
    vImageBuffer_InitWithCGImage(&buffer, &format, nil , sunset.CGImage, 0)
    ........

关于ios - 在 Swift ios 中使用 vImageBuffer_initWithCGImage 时出现 "fatal error: unexpectedly found nil while unwrapping an Optional value",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26755978/

相关文章:

ios - 您如何使用 HealthKit 检测锻炼开始/停止?

ios - 显示 Coreplot 条形图值而不进行选择

java - AffineTransform 截断图像

matlab - 给定三点计算仿射变换

python-3.x - 无法使用经过训练的 Tensorflow 模型

swift - 使用 swift 创建乘法表

ios - Alamofire 监控网络状态

ios - Xcode 10 : Load the same . 项目目标和单元测试目标中的xml文件

swift - 优化代码块在开发模式下不起作用

swift - Xcode 项目模板和 Swift 包依赖