композитные цвета: CALayer и режим смешивания на iPhone

Я пытаюсь использовать базовое изображение на iPhone. Я могу составить свои цвета с помощью кварца для рисования uiview, но я хочу разделить каждый компонент в CALayer (UIview используют больше ресурсов).

Таким образом, у меня есть белая маска, которую я хочу использовать для фильтрации фонового битового массива, и я хочу попробовать другой режим наложения. К сожалению, слои только "добавляют" свои цвета.

Вот мой код:

@implementation WhiteLayerHelper

    - (void)drawLayer:(CALayer *)theLayer
            inContext:(CGContextRef)myContext
    {
        // draw a white overlay, with special blending and alpha values, so that the saturation can be animated
        CGContextSetBlendMode(myContext,kCGBlendModeSaturation);
        CGContextSetRGBFillColor(myContext,1.0,1.0,1.0,0.9);
        CGContextFillRect(myContext,[UIScreen mainScreen].bounds);

    }

@end

И вот основное представление drawrect код, где я использую свой CALayer:

- (void)drawRect:(CGRect)rect {
    //get the drawing context
    CGContextRef myContext = UIGraphicsGetCurrentContext();
    // draw the background
    [self fillContext:myContext withBounds:m_overlayRect withImage:m_currentImage];
    [whiteLayer renderInContext:myContext];

}

Есть ли что-то не так?

6
задан Mat 7 July 2012 в 08:34
поделиться

2 ответа

Вовсе нет ... Я думаю, что для этого проще использовать opengl, потому что он, похоже, еще не реализован в CA.

1
ответ дан 9 December 2019 в 20:45
поделиться

Этот метод не кажется недостатком Core Animation, поскольку слои предварительно визуализируются в контексты изображения. Базовое изображение используется для фильтрации в реальном времени (во время анимации и прочего) этих изображений по сравнению с фоновыми слоями и их изображениями. Таким образом, для этой возможности используются свойства композитинга CALayer, которые недоступны на iPhone / iOS (пока) из-за требований Core Image.

OpenGL может сделать это за нас в нашей ситуации, однако =)

edit (add): установка режима наложения с помощью CGContext в -drawInContext: и -drawLayer: inContext:, конечно, по-прежнему действует с тем, что уже было визуализированы или присутствуют в изображении этого контекста. (когда он установлен до того, как что-либо было визуализировано в контексте (изображение), это эффект смешивания либо с полным черным, либо с полным белым (я не уверен, какой =)

4
ответ дан 9 December 2019 в 20:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: