如何将CIImage渲染为每通道32位浮点像素缓冲区?

时间:2017-12-06 16:44:51

标签: floating-point core-image ciimage core-video cvpixelbuffer

我想将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位数?

1 个答案:

答案 0 :(得分:0)

如果每个通道16位就足够了,您可以使用kCVPixelFormatType_64RGBAHalf进行渲染。