CIImageをタイプkCVPixelFormatType_128RGBAFloatのピクセルバッファにレンダリングしたいと思います。しかし、CIContext.render()は "サポートされていないフォーマット"と言って失敗します。私は、iOS 11.CIImageを32ビット/チャンネルの浮動小数点ピクセルバッファにレンダリングするにはどうすればよいですか?
を実行しているiPhone 7プラスでテストここに私のコードです:
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)
バッファが正常に作成された - アサーションは発生しません。最後の行のレンダリングでは、「サポートされていない形式」とは言いません。
また、第2のnilを[kCVPixelBufferIOSurfacePropertiesKey: [:]] as CFDictionary
に置き換えてIOSurface-backed CVPixelBufferを作成しようとしましたが、役に立たなかったです。
これを動作させるにはどうすればよいですか?
フォーマットがkCVPixelFormatType_128RGBAFloatである必要があります。これは、ここでは複雑すぎるため、ピクセル値は0〜255より大きい範囲になります(丸めできない小数点も含む)。 CIContextを呼び出すMTLDevice
- kCVPixelFormatType_64ARGB
- software renderer
- : は、私はいくつかのより多くの事を試してみました。 createCGImage()
- MTLTextureにレンダリングしましたが、作成方法を理解できませんでした。
- IOSURfaceへのレンダリング
- CIContext()でclearCaches()を呼び出します。
- reclaimResources()を呼び出していますが、これはiOSでは利用できません。
- 私の入力が<のCIContextであることを確認してください。 inputImageMaximumSize()およびoutputImageMaximumSize()
- rawバイト配列にレンダリングします。
これらはいずれも機能しませんでした。レンダリングは、1チャネルあたり32ビットの浮動小数点数、または1チャネルあたり16ビットの整数で、Core Imageではサポートされていませんか?