我想将CIImage渲染到kCVPixelFormatType_128RGBAFloat类型的像素缓冲区中。但是CIContext.render()没有说“不支持的格式”。我在运行iOS 11的iPhone 7 Plus上进行了测试。
这是我的代码:
let context = CIContext()
var buffer: CVPixelBuffer? = nil
let buffer = CVPixelBufferCreate(nil,
width,
height,
kCVPixelFormatType_128RGBAFloat,
nil,
&buffer)
assert(buffer != nil, "Couldn't create buffer")
context.render(ciImage, to: buffer)
缓冲区已成功创建 - 断言不会触发。只是最后一行的渲染没有说“不支持的格式”。
我还尝试使用[kCVPixelBufferIOSurfacePropertiesKey: [:]] as CFDictionary
替换第二个nil来创建IOSurface-backed CVPixelBuffer,但它没有帮助。
如何让它发挥作用?
格式需要是kCVPixelFormatType_128RGBAFloat,因为太复杂而无法进入此处,短版本是像素值的范围大于0-255,包括无法舍入的小数值。
我尝试了更多的东西:
这些都没有奏效。渲染为每通道32位浮点数还是Core Image不支持每通道16位数?