在 Swift 中将 CGImage 转换为 CVPixelBuffer

问题描述

我有一个像这样创建的图像:

let image = CGImage(jpegDataProviderSource: dataProvider!,decode: nil,shouldInterpolate: false,intent: CGColorRenderingIntent.defaultIntent)

现在我想将其转换为 CVPixelBuffer

我检查了多种解决方案。看起来它们已经过时了。

例如:

let image_cv = pixelBufferFromCGImage(image: <#T##CGImage#>)

func pixelBufferFromCGImage(image: CGImage) -> CVPixelBuffer {
      var pxbuffer: CVPixelBuffer? = nil
      let options: NSDictionary = [:]

      let width =  image.width
      let height = image.height
      let bytesPerRow = image.bytesPerRow

//      let dataFromImageDataProvider = image.dataProvider!.data
//      let x = CFDataGetBytePtr(dataFromImageDataProvider)
      let dataFromImageDataProvider = CFDataCreateMutableCopy(kCFAllocatorDefault,image.dataProvider!.data)
      let x = CFDataGetMutableBytePtr(dataFromImageDataProvider)


      CVPixelBufferCreateWithBytes(
          kCFAllocatorDefault,width,height,kCVPixelFormatType_32ARGB,CFDataGetBytePtr(dataFromImageDataProvider),bytesPerRow,nil,options,&pxbuffer
      )
      return pxbuffer!;
  }

无法编译,因为:

Cannot convert value of type 'UnsafePointer<UInt8>?' to expected argument type 'UnsafeMutableRawPointer'

我也尝试过使用这个函数:https://github.com/hollance/CoreMLHelpers/blob/master/CoreMLHelpers/CGImage%2BCVPixelBuffer.swift

但我收到:

Value of optional type 'CVPixelBuffer?' (aka 'Optional<CVBuffer>') must be unwrapped to a value of type 'CVPixelBuffer' (aka 'CVBuffer')

我该如何解决?

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)