在iOS Cocoa中叠加非透明像素

时间:2011-04-05 23:34:35

标签: objective-c ios

iOS SDK上有没有办法用彩色像素覆盖图像中的非透明像素?


非常感谢两位回答。

我实现的最终解决方案使用了子类UIView的drawRect方法中接受的答案中提到的代码,我使用以下代码覆盖颜色:

CGContextSetFillColor(context, CGColorGetComponents([UIColor colorWithRed:0.5 green:0.5 blue:0 alpha:1].CGColor));

CGContextFillRect(context, area);

2 个答案:

答案 0 :(得分:3)

我认为您可能正在寻找混合模式 kCGBlendModeSourceAtop 。首先,将UIImage绘制到您的视图中。然后使用

获取当前图形上下文
CGContext currentCtx = UIGraphicsGetCurrentContext();

然后保存上下文状态,并设置混合模式:

CGContextSaveGState(currentCtx);
CGContextSetBlendMode(currentCtx, kCGBlendModeSourceAtop);

然后,您可以在UIImage的不透明像素上绘制任何想要覆盖的内容。之后,只需重置上下文状态:

CGContextRestoreGState(currentCtx);

希望这有帮助!

答案 1 :(得分:2)

您可以使用混合模式修改某些内容的绘制方式。有关iOS上Core Graphics支持的混合模式的完整列表,请参阅http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGContext/Reference/reference.html%23//apple_ref/doc/c_ref/CGBlendMode。根据您的描述,我认为您会对使用旧内容的alpha值作为掩码绘制新内容的kCGBlendModeSourceIn或使用旧内容的alpha绘制新内容的kCGBlendModeSourceAtop感兴趣。使用新内容的alpha值作为掩码,作为旧内容之上的掩码。您可以使用CGContextSetBlendMode为所有绘图设置混合模式,也可以使用-[UIImage drawAtPoint:blendMode:alpha:]绘制具有特定混合模式的UIImage。