ios - 将 pixelBuffer(kCVPixelFormatType_420YpCbCr8Planar) 转换为 CIImage
问题描述
现在我正在尝试将 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。
请教我。
解决方案
有了这个,您可以转换为 ARGB8888vImageConvert_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
}()
推荐阅读
- swift - 为什么我不能在通知中传递带有枚举键的字典
- jquery - Django:即使没有任何改变,Jquery 也不会突然工作.. .. 没有定义
- javascript - 是否可以从 onkeyup 获取密钥代码?
- python - 无法导入 numpy:AttributeError:类型对象“numpy.ndarray”没有属性“__array_function__”
- git - 你如何调试 git 凭证助手?
- matlab - 使用 for 循环和 fsolve 的非线性方程
- github - GitHub Actions:过滤器返回“jq:错误无法迭代 null (null)”
- php - PHP致命错误:未捕获的错误:在布尔值上调用成员函数execute()
- sql-server - 我应该在 SSIS 中的 ADO.Net 和 OLE 之间选择什么?
- laravel - Laravel 背包列表不显示