Я пытаюсь преобразовать изображение, поступающее из видеопотока (CVImageBuffer), в заданный набор предопределенных цветов. Ниже я сначала преобразовываю поток в CIImage с индексированным цветовым пространством, затем преобразовываю CIImage в UIImage, но это окончательное преобразование дает следующую ошибку: [render] Could not support source colorspace: Indexed Colorspace 0x281608ba0
.
Любая идея о том, как получить этот эффект (например, эффект Posterize, но с определенными цветами)?
let palette: [UInt8] = [
0, 0, 0,
0, 0, 255
0, 255, 0,
255, 0, 0,
255, 255, 255]
let indexedColorSpace = CGColorSpace(indexedBaseSpace: CGColorSpaceCreateDeviceRGB(),
last: palette.count - 1,
colorTable: palette)!
let image = CIImage(cvImageBuffer: videoPixelBuffer,
options: [CIImageOption.colorSpace: indexedColorSpace])
let context = CIContext()
let cgImage = context.createCGImage(image, from: image.extent)!
indexedImageView.image = UIImage(cgImage: cgImage)
[РЕДАКТИРОВАТЬ]
После матового комментария, я добавил рендеринг через CIContext, но все равно получаю ту же ошибку цветового пространства…
indexedImageView.image = UIImage(ciImage: image)
Вы не можете просто обернуть CIImage в UIImage и отобразить его в представлении изображения. Сначала вы должны фактически преобразовать CIImage в настоящий UIImage. Либо так, либо отображайте CIImage напрямую с помощью Metal. - person matt   schedule 25.04.2020