Я пытаюсь использовать CIColorMatrix в Swift на iOS, и я придумываю результат, который не соответствует моему пониманию того, как он должен работать.CIColorMatrix math не имеет смысла
documentation определяет его как:
s.r = dot(s, redVector)
s.g = dot(s, greenVector)
s.b = dot(s, blueVector)
s.a = dot(s, alphaVector)
s = s + bias
Так скажем, у меня есть входной пиксель со значениями RGBA [255, 0, 0, 255] (100% красного). И я применяю вектор [0,5, 0, 0, 0] к красному каналу. Не должно ли это иметь значение красного канала ?
(255*0.5)+(0*0)+(0*0)+(255*0) = 127.5
По какой-то причине, с этими значениями, CIColorMatrix дает мне значение . Разве это не определение dot(), о котором они говорят?
Вот фрагмент кода (входное изображение все красное).
// Before this, the RGB values are [255, 0, 0]
let vec = CIVector(x: 0.5, y: 0, z: 0, w: 0)
let filter = CIFilter(name: "CIColorMatrix")
filter!.setDefaults()
// Default bias is [0,0,0,0] (explicitly setting it as such doesn't change the result).
filter!.setValue(myImage, forKey: kCIInputImageKey)
filter!.setValue(vec, forKey: "inputRVector")
// After this, the RGB values are [187, 0, 0]
Что мне не хватает или непонимаю здесь?
Я понял, что после того, как я разместил это, возможно, что-то возится со значениями после запуска фильтра CIColorMatrix. Я конвертирую CIImage в CGImage с CIContext createCGImage(), и именно там я беру выборку значений пикселей. Существует ли какое-то отображение тонов или гамма-кривая, которые применяются на этом этапе? Я не могу найти ничего об этом в документах. – Wouldchux