如何从CVPixelBuffer创建CGImage?

3
我有一个简单的函数,可以从 CVPixelBuffer 创建 CGImage:
if let buffer = (results as? [VNPixelBufferObservation])?.first {
    let pixelBuffer = buffer.pixelBuffer
    let ciImage = CIImage(cvPixelBuffer: pixelBuffer)
    let resultImage = UIImage(ciImage: ciImage)
    return resultImage.cgImage //returns nil
}

但它返回了nil。为什么?

1
你试过这个吗? - undefined
2个回答

5
输出为nil是因为您使用CIImage而不是CGImage创建了UIImage实例。以下是创建CGImage的方法:
func createCGImage(from pixelBuffer: CVPixelBuffer) -> CGImage? {
   let ciContext = CIContext()
   let ciImage = CIImage(cvImageBuffer: pixelBuffer)
   return ciContext.createCGImage(ciImage, from: ciImage.extent)
}

1

试试这个

import VideoToolbox
func createImage(from pixelBuffer: CVPixelBuffer) -> CGImage? {
    var cgImage: CGImage?
    VTCreateCGImageFromCVPixelBuffer(pixelBuffer, options: nil, imageOut: &cgImage)
    return cgImage
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接