Accelerate フレームワークを使用して、マトリックスを CGImage に適用します。
まず、CGImage を vImage_Buffer に変換しました。
let bitmapInfo: CGBitmapInfo = [ .floatComponents,
CGBitmapInfo( rawValue: CGImageAlphaInfo.none.rawValue ),
.byteOrder32Little ]
var format = vImage_CGImageFormat( bitsPerComponent: 32,
bitsPerPixel: 32 * 3,
colorSpace: nil,
bitmapInfo: FloatBitmapInfo,
version: 0,
decode: nil,
renderingIntent: .defaultIntent )
var inputBuffer = vImage_Buffer()
vImageBuffer_InitWithCGImage( &inputBuffer,
&format,
nil,
aCGImage, // input CGImage
UInt32( kvImageNoFlags ) )
次に、vImageMatrixMultiply を適用しようとしました。
vImageMatrixMultiply_PlanarF( &inputBuffer, // srcs
&outputBuffer, // dests
3, // src_planes
3, // dest_planes
aMatrix, // applying matrix
&preBias, // pre_bias
&postBias, // post_bias
UInt32( kvImageNoFlags ) )
しかし、vImageMatrixMultiply は vImage_Buffer を srcs および dests 引数として受け入れず、次のようなコンパイル エラーが発生しました。
タイプ「vImage_Buffer」の値を予期される引数タイプ「UnsafePointer< vImage_Buffer >?」に変換できません。
「vImage_Buffer」を「UnsafePointer< vImage_Buffer >?」に変換する方法について調べてみました。しかし、答えは見つかりませんでした。
そこで、「vImage_Buffer」を「UnsafePointer< vImage_Buffer >?」に変換する方法、または「UnsafePointer< vImage_Buffer >?」を直接作成する方法を知りたいです。CGImage から、または vImageMatrixMultiply を適切に使用するその他の方法。