【发布时间】:2010-11-04 16:46:45
【问题描述】:
我想获取一个objective-c UIImage 并使其全黑,但仍具有相同的alpha 值,以便它成为其先前图像的轮廓。我想知道除了获取 CGImage 数据并更改每个像素的值之外,还有什么更方便的方法吗?
【问题讨论】:
标签: objective-c cocoa cocoa-touch uiimage
我想获取一个objective-c UIImage 并使其全黑,但仍具有相同的alpha 值,以便它成为其先前图像的轮廓。我想知道除了获取 CGImage 数据并更改每个像素的值之外,还有什么更方便的方法吗?
【问题讨论】:
标签: objective-c cocoa cocoa-touch uiimage
您可以通过使用 kCGImageAlphaOnly 和 1 个组件创建 CGBitmapContext 来提取 alpha 信息并绘制到其中。然后你会得到一个只有 alpha 的图像。
然后您可以使用 kCGBlendModeDestinationIn 将其合成到全黑图像上。这应该会为您留下一张全黑且带有原始 alpha 值的图像。
【讨论】:
这是我用来制作图像彩色版本的函数:
@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 操作以所需的颜色填充图像的不透明区域。
【讨论】: