首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从CGImage到CVPixelBuffer的Swift

从CGImage到CVPixelBuffer的Swift
EN

Stack Overflow用户
提问于 2021-05-04 19:59:20
回答 1查看 135关注 0票数 0

我有一幅画,像这样:

代码语言:javascript
复制
let image = CGImage(jpegDataProviderSource: dataProvider!,
                   decode: nil, shouldInterpolate: false,
                   intent: CGColorRenderingIntent.defaultIntent)

现在我想把它转换成CVPixelBuffer

我检查了多个解决方案。看来他们已经过时了。

例如:

代码语言:javascript
复制
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!;
  }

不编译是因为:

代码语言:javascript
复制
Cannot convert value of type 'UnsafePointer<UInt8>?' to expected argument type 'UnsafeMutableRawPointer'

我还尝试使用以下函数:https://github.com/hollance/CoreMLHelpers/blob/master/CoreMLHelpers/CGImage%2BCVPixelBuffer.swift

但我收到:

代码语言:javascript
复制
Value of optional type 'CVPixelBuffer?' (aka 'Optional<CVBuffer>') must be unwrapped to a value of type 'CVPixelBuffer' (aka 'CVBuffer')

我该怎么解决呢?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2022-04-01 17:10:28

你能试着用变量x替换参数CFDataGetBytePtr(dataFromImageDataProvider)吗?

所以看起来:

代码语言:javascript
复制
  let dataFromImageDataProvider = CFDataCreateMutableCopy(kCFAllocatorDefault, 0, image.dataProvider!.data)
  let x = CFDataGetMutableBytePtr(dataFromImageDataProvider)


  CVPixelBufferCreateWithBytes(
      kCFAllocatorDefault,
      width,
      height,
      kCVPixelFormatType_32ARGB,
      x,
      bytesPerRow,
      nil,
      nil,
      options,
      &pxbuffer
  )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67391422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档