我如何将CIIMAIMAIMAIME呈现为一个32位通道浮点像素缓冲区



我想将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渲染。

相关内容

  • 没有找到相关文章

最新更新