Я собираюсь применить матрицу к CGImage, используя фреймворк Accelerate.Как использовать vImageMatrixMultiply в Swift 3?
Во-первых, я преобразовал 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 в Суданских Красном Полумесяце и dests аргументов, и я получил ошибку компиляции с описанием:
Невозможно преобразовать значение типа «vImage_Buffer» к ожидаемому типу аргумента «UnsafePointer < vImage_Buffer >?»
Я искал о преобразовании "vImage_Buffer" в "UnsafePointer < vImage_Buffer>?" но не нашли ответа.
Так что я хотел бы знать, как преобразовать "vImage_Buffer" в "UnsafePointer < vImage_Buffer>?", Или как непосредственно создавать "UnsafePointer < vImage_Buffer>?" из CGImage или любые другие способы правильного использования vImageMatrixMultiply.
Большое спасибо за код. Это намного сложнее, чем я думал ... – rdeepy
@rdeepy, на самом деле, я использовал очень небольшую часть ракурса Accelerate, но это сложнее, чем любой другой, который я испытал. И если вы действительно примете некоторые части кода выше, пожалуйста, скажите мне. Вам понадобится код завершения после использования ... – OOPer
Спасибо. Я использовал vDSP, но я впервые использовал vImage. Я начал проверять Core Image, и теперь я думаю, что CIColorMatrix удовлетворит мое требование более легко. – rdeepy