【问题标题】:CGImage to CVPixelBuffer in SwiftSwift 中的 CGImage 到 CVPixelBuffer
【发布时间】:2022-04-02 01:10:28
【问题描述】:

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

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, 0, image.dataProvider!.data)
      let x = CFDataGetMutableBytePtr(dataFromImageDataProvider)


      CVPixelBufferCreateWithBytes(
          kCFAllocatorDefault,
          width,
          height,
          kCVPixelFormatType_32ARGB,
          CFDataGetBytePtr(dataFromImageDataProvider),
          bytesPerRow,
          nil,
          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')

我该如何解决?

谢谢

【问题讨论】:

    标签: ios swift mlmodel


    【解决方案1】:

    您可以尝试将参数 CFDataGetBytePtr(dataFromImageDataProvider) 替换为变量 x 吗?

    所以它看起来像:

      let dataFromImageDataProvider = CFDataCreateMutableCopy(kCFAllocatorDefault, 0, image.dataProvider!.data)
      let x = CFDataGetMutableBytePtr(dataFromImageDataProvider)
    
    
      CVPixelBufferCreateWithBytes(
          kCFAllocatorDefault,
          width,
          height,
          kCVPixelFormatType_32ARGB,
          x,
          bytesPerRow,
          nil,
          nil,
          options,
          &pxbuffer
      )
    

    【讨论】:

      猜你喜欢
      • 2016-11-14
      • 1970-01-01
      • 2014-08-27
      • 1970-01-01
      • 2021-07-12
      • 2019-01-03
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      相关资源
      最近更新 更多