Я пытаюсь нарисовать изображение определенного цвета. Чтобы получить этот эффект, сначала я рисую изображение (состоящее в основном из белого и черного), а затем рисую над ним прямоугольник указанного цвета (скажем, красного). Доступны различные варианты композитинга, но ни один из них не является именно тем, что я хочу.
Я хочу, чтобы цвета (и альфа-значения) были умножены вместе. Я думаю, что это иногда называют «модуляцией» операции в других графических системах. Таким образом, значения белого в изображении будут умножены на значения красного в прямоугольнике наложения, чтобы получить красный цвет. Значения черного на изображении будут умножены с черного на черный продукт.
Другими словами, 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 - это НЕ то, что я хочу, но оно близко. (Это сложение вместо умножения).
Есть ли способ сделать это в Кварце? Это очень легко сделать в OpenGL, например. Я посмотрел на CIFilter's, но они кажутся немного громоздкими для этого. Но если это единственный способ, я буду признателен за любой пример кода, который поможет мне в правильном направлении.