I am going to apply a matrix to a CGImage using Accelerate framework.
First, I converted a CGImage to 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 ) )
then tried to apply vImageMatrixMultiply.
vImageMatrixMultiply_PlanarF( &inputBuffer, // srcs
&outputBuffer, // dests
3, // src_planes
3, // dest_planes
aMatrix, // applying matrix
&preBias, // pre_bias
&postBias, // post_bias
UInt32( kvImageNoFlags ) )
But vImageMatrixMultiply doesn't accept vImage_Buffer as srcs and dests arguments, and I got a compilation error describing:
Cannot convert value of type "vImage_Buffer" to expected argument type "UnsafePointer< vImage_Buffer >?"
I searched about converting "vImage_Buffer" to "UnsafePointer< vImage_Buffer >?" but haven't found any answer.
So I would like to know how to convert "vImage_Buffer" to "UnsafePointer< vImage_Buffer >?", or how to directly create "UnsafePointer< vImage_Buffer >?" from CGImage, or any other ways to appropriately use vImageMatrixMultiply.