我想采用一个物镜-c UIImage并将其全部变为黑色,但仍然具有相同的alpha值,以便它成为其前一个图像的轮廓。我想知道有没有比仅仅获取CGImage数据和更改每个像素的值更方便的方法呢?
答案 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操作以所需的颜色填充图像的不透明区域。