我想将ciimage渲染到类型kcvpixelformattype_128rgbafloat的像素缓冲区中。但是cicontext.render()未能说"不支持格式"。我在iPhone 7上测试了运行iOS 11。
这是我的代码:
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
代替第二个零来创建iosurface支持的CVPixelBuffer,但没有帮助。
我该如何工作?
格式需要是kcvpixelformattype_128rgbafloat,因为出于太复杂而无法进入此处的原因,简短的版本是像素值的范围大于0-255,包括无法四舍五入的分数值。
。 。我尝试了更多的事情:
- kcvpixelformattype_64argb
- 软件渲染器
- 创建由EaglContext支持的Cicontext
- 创建由mtldevice支持的cicontext
- 致电cicontext.createcgimage()
- 渲染到mtltexture,但我不知道如何创建一个。
- 渲染到iosurface
- 在cicontext()。 上调用clearcaches()
- 调用reclaimResources(),但这在iOS上不可用。
- 检查我的输入是<cicontext.inputimagemaximumsize()和outputimagemaximesize()
- 渲染到原始字节数组。
这些都没有。呈现为每个通道浮子的32位还是每个通道INT不支持的16位?
如果每个频道16位足够,则可以使用kcvpixelformattype_64rgbahalf渲染。