UIImage,有一种简单的方法可以使它变暗或全黑

时间:2010-11-04 16:46:46

标签: objective-c cocoa cocoa-touch uiimage

我想采用一个物镜-c UIImage并将其全部变为黑色,但仍然具有相同的alpha值,以便它成为其前一个图像的轮廓。我想知道有没有比仅仅获取CGImage数据和更改每个像素的值更方便的方法呢?

2 个答案:

答案 0 :(得分:3)

您可以通过使用kCGImageAlphaOnly和1个组件创建一个CGBitmapContext来提取alpha信息并绘制到该信息中。那么你的图像只有alpha。

然后你可以用kCGBlendModeDestinationIn将它合成到一个完全黑色的图像上。这应该会给你留下一张全黑的原始alpha值的图像。

答案 1 :(得分:2)

这是我用来制作图像的彩色版本的函数:

@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操作以所需的颜色填充图像的不透明区域。