Обрезка CVPixelBuffer и расширение переполнения с нулевым заполнением
В настоящее время я использую следующий код для обрезки моего CVPixelBuffer, и он работает в большинстве случаев.
let srcData = CVPixelBufferGetBaseAddress(srcPixelBuffer)
let srcBytesPerRow = CVPixelBufferGetBytesPerRow(srcPixelBuffer)
let offset = cropY*srcBytesPerRow + cropX*4
var srcBuffer = vImage_Buffer(data: srcData.advanced(by: offset),
height: vImagePixelCount(cropHeight),
width: vImagePixelCount(cropWidth),
rowBytes: srcBytesPerRow)
Тем не менее, я думаю, что это приведет к EXEC_BAD_ACCESS
ошибка, когда cropHeight
или же cropWidth
простирается за высоту и ширину srcPixelbuffer
, Я полагаю, что это так, потому что следующий фрагмент кода будет время от времени падать.
let destBytesPerRow = scaleWidth*4
guard let destData = malloc(scaleHeight*destBytesPerRow) else {
print("Error: out of memory")
return nil
}
var destBuffer = vImage_Buffer(data: destData,
height: vImagePixelCount(scaleHeight),
width: vImagePixelCount(scaleWidth),
rowBytes: destBytesPerRow)
// crashes on the next line.
let error = vImageScale_ARGB8888(&srcBuffer, &destBuffer, nil, vImage_Flags(0))
Любые идеи о том, как расширить и изображение с отступом, чтобы он не вылетал?