Я пытаюсь нарисовать изображение определенным цветом. Чтобы получить этот эффект, сначала я рисую изображение (состоящее в основном из белого и черного), а затем рисую над ним прямоугольник определенного цвета (скажем, красного). Доступны различные варианты композитинга, но ни один из них не совсем то, что мне нужно.
Я хочу, чтобы цвета (и альфа-значения) умножались вместе. Я думаю, что в других графических системах это иногда называют операцией «Модуляция». Таким образом, белые значения на изображении будут умножены на красные значения в прямоугольнике наложения, чтобы получить красный цвет. Значения черного в изображении будут умножены на черный, чтобы получить черный результат.
Другими словами, R = S * D (результат равен источнику, умноженному на место назначения).
Это код, с которым я сейчас работаю:
[image drawInRect:[self bounds] fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1];
NSColor * blend = [NSColor colorWithCalibratedRed:1 green:0 blue:0 alpha:1.0];
[blend setFill];
NSRectFillUsingOperation(self.bounds, NSCompositePlusDarker);
NSCompositePlusDarker - это НЕ то, что я хочу, но это близко. (Это сложение вместо умножения).
Есть ли способ сделать это в Quartz? Например, это очень просто сделать в OpenGL. Я посмотрел на фильтры CIFilter, но они кажутся немного громоздкими для этого. Но если это единственный способ, я был бы признателен за любой образец кода, который направит меня в правильном направлении.