我将使用 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 的方式。