现在,我尝试将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/