How to turn a CVPixelBuffer into a UIImage?

前端 未结 6 1762
梦毁少年i
梦毁少年i 2020-11-28 21:55

I\'m having some problems getting a UIIMage from a CVPixelBuffer. This is what I am trying:

CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(imag         


        
6条回答
  •  -上瘾入骨i
    2020-11-28 22:18

    Try this one in Swift.

    Swift 4.2:

    import VideoToolbox
    
    extension UIImage {
        public convenience init?(pixelBuffer: CVPixelBuffer) {
            var cgImage: CGImage?
            VTCreateCGImageFromCVPixelBuffer(pixelBuffer, nil, &cgImage)
    
            guard let cgImage = cgImage else {
                return nil
            }
    
            self.init(cgImage: cgImage)
        }
    }
    

    Swift 5:

    import VideoToolbox
    
    extension UIImage {
        public convenience init?(pixelBuffer: CVPixelBuffer) {
            var cgImage: CGImage?
            VTCreateCGImageFromCVPixelBuffer(pixelBuffer, options: nil, imageOut: &cgImage)
    
            guard let cgImage = cgImage else {
                return nil
            } 
    
            self.init(cgImage: cgImage)
        }
    }
    

    Note: This only works for RGB pixel buffers, not for grayscale.

提交回复
热议问题