#ios #shader #core-image #cifilter
#iOS #шейдер #ядро-изображение #cifilter
Вопрос:
У меня есть следующий код для обрезки изображения и рендеринга в CVPixelBuffer, который, к сожалению, не работает. Некоторая часть изображения с левой стороны черная или зеленая. Интересно, что я делаю не так?
_ciContext = CIContext(mtlDevice: metalDevice, options: [CIContextOption.useSoftwareRenderer: false])
let dstWidth = CVPixelBufferGetWidth(dstPixelBuffer!)
let dstHeight = CVPixelBufferGetHeight(dstPixelBuffer!)
let srcWidth = CVPixelBufferGetWidth(pixelBuffer)
let srcHeight = CVPixelBufferGetHeight(pixelBuffer)
let cropRect = CGRect(x: (srcWidth - dstWidth)/2, y: (srcHeight - dstHeight)/2, width: dstWidth, height: dstHeight)
let dstImage = srcImage.cropped(to: cropRect)
NSLog("Src image (srcImage.extent), (dstImage.extent)")
var dstBounds = CGRect.zero
dstBounds.size = dstImage.extent.size
_ciContext.render(dstImage, to: dstPixelBuffer!, bounds: dstBounds, colorSpace: srcImage.colorSpace )
РЕДАКТИРОВАТЬ: мне пришлось применить преобразование translate к dstImage по количеству -cropRect.minX и -cropRect.minY, чтобы заставить его работать. Понятия не имею, почему. Может кто-нибудь прокомментировать правильный способ обрезки CIImage и рендеринга в CVPixelBuffer?
Комментарии:
1. В случае, если вы все равно преобразуете в CGImage позже, метод CGImage.cropping() дает ожидаемые результаты. Как вы обнаружили, CIImage.cropped() не переводит результат в начало координат.