Reputation: 61840
I have a simple function to create CGImage
from CVPixelBuffer
:
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
}
But it returns nil. Why?
Upvotes: 4
Views: 5051
Reputation: 1118
The output is nil because you are creating the UIImage instance with a CIImage not CGImage. Here is a way to create a CGImage:
func createCGImage(from pixelBuffer: CVPixelBuffer) -> CGImage? {
let ciContext = CIContext()
let ciImage = CIImage(cvImageBuffer: pixelBuffer)
return ciContext.createCGImage(ciImage, from: ciImage.extent)
}
Upvotes: 7
Reputation: 759
Try this one
import VideoToolbox
func createImage(from pixelBuffer: CVPixelBuffer) -> CGImage? {
var cgImage: CGImage?
VTCreateCGImageFromCVPixelBuffer(pixelBuffer, options: nil, imageOut: &cgImage)
return cgImage
}
Upvotes: 2