1

我想将 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)

缓冲区创建成功——断言没有触发。只有最后一行的渲染没有说“不支持的格式”。

我还尝试通过将第二个 nil 替换为来创建一个IOSurface 支持的 CVPixelBuffer[kCVPixelBufferIOSurfacePropertiesKey: [:]] as CFDictionary,但它没有帮助。

我怎样才能让它工作?

格式需要为 kCVPixelFormatType_128RGBAFloat,因为这里太复杂,无法进入,简短的版本是像素值的范围大于 0-255,包括不能四舍五入的小数值。

我尝试了更多的东西:

这些都不起作用。Core Image 不支持渲染到每通道浮点数 32 位还是每通道整数 16 位?

4

1 回答 1

0

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

于 2018-01-07T03:44:30.650 回答