现在,我尝试将pixelBuffer转换为CIImage,但是失败。

当pixelBuffer类型为kCVPixelFormatType_420YpCbCr8BiPlanarFullRange时,可以正确执行以下代码。

let sourceImage = CIImage.init(cvPixelBuffer: imageBuffer, options: nil)

但是,当pixelBuffer类型为kCVPixelFormatType_420YpCbCr8Planar时,它将失败。

日志如下。

[api] -[CIImage initWithCVPixelBuffer:options:] failed because its pixel format y420 is not supported.

因此,我想知道如何转换pixelBuffer类型或如何将pixelBuffer(kCVPixelFormatType_420YpCbCr8Planar)转换为CIImage。

请教我。

最佳答案

查看vImageConverter

有了这个你可以转换为ARGB8888 vImageConvert_420Yp8_CbCr8ToARGB8888
和缪斯创建vImage_Buffer

转换矩阵示例

/// This is the YCbCr to RGB conversion opaque object used by the convert function.
private var conversionMatrix: vImage_YpCbCrToARGB = {
    var pixelRange = vImage_YpCbCrPixelRange(Yp_bias: 0, CbCr_bias: 128, YpRangeMax: 255, CbCrRangeMax: 255, YpMax: 255, YpMin: 1, CbCrMax: 255, CbCrMin: 0)
    var matrix = vImage_YpCbCrToARGB()
    vImageConvert_YpCbCrToARGB_GenerateConversion(kvImage_YpCbCrToARGBMatrix_ITU_R_709_2, &pixelRange, &matrix, kvImage420Yp8_CbCr8, kvImageARGB8888, UInt32(kvImageNoFlags))
    return matrix
}()


示例代码:CapturedImageSampler.swift

关于ios - 将pixelBuffer(kCVPixelFormatType_420YpCbCr8Planar)转换为CIImage,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58304164/

10-09 03:22