UIImage, есть ли простой способ сделать его темнее или полностью черным - PullRequest
0 голосов
/ 04 ноября 2010

Я хочу взять UIImage для объектива c и сделать его черным, но при этом иметь те же альфа-значения, чтобы он стал силуэтом своего прежнего изображения. Мне было интересно, есть ли более удобный способ сделать это, чем просто взять данные CGImage и изменить значения для каждого пикселя?

Ответы [ 2 ]

3 голосов
/ 07 ноября 2010

Вы можете извлечь альфа-информацию, создав CGBitmapContext с kCGImageAlphaOnly и 1 компонентом и добавив в него.Тогда у вас будет изображение только с альфа-каналом.

Затем вы можете скомбинировать это изображение с полностью черным с помощью kCGBlendModeDestinationIn.Это должно оставить вас с черным изображением с исходными значениями альфа.

2 голосов
/ 08 ноября 2010

Вот функция, которую я использовал для создания цветной версии изображения:

@interface NSImage( ColorizedImageAdditions )

- (NSImage*) colorizedImage: (NSColor*) color;

@end

- (NSImage*) colorizedImage: (NSColor*) color
{
    NSSize imageSize = [ self size ];
    NSImage* result = [ [ [ NSImage alloc ] initWithSize: imageSize ] autorelease ];

    [ result lockFocus ];
    [ NSGraphicsContext saveGraphicsState ];

    NSRect imageBounds = NSMakeRect( 0, 0, imageSize.width, imageSize.height );

    [ color setFill ];
    [ NSBezierPath fillRect: imageBounds ];

    [ self drawInRect: imageBounds fromRect: NSZeroRect 
            operation: NSCompositeDestinationIn fraction: 1.0 ];

    [ NSGraphicsContext restoreGraphicsState ];
    [ result unlockFocus ];

    return result;
}

Используется операция NSCompositeDestinationIn для заполнения непрозрачных областей изображения требуемым цветом.

...