我正在尝试在运行时更改图像的颜色。我在SO上看到了几个答案,但是它们都改变了背景颜色而不是前景,这就是我要尝试的方法。我已将代码基于另一个SO thread。
这是我的代码:
@implementation UIImage (Coloring)
-(UIImage*) imageWithColorOverlay:(UIColor*)color
{
//create context
UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);
CGContextRef context = UIGraphicsGetCurrentContext();
// drawingcode
//bg
CGRect rect = CGRectMake(0.0, 0.0, self.size.width, self.size.height);
[self drawInRect:rect];
//fg
CGContextSetBlendMode(context, kCGBlendModeMultiply);
CGContextSetFillColorWithColor(context, color.CGColor);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//end
return image;
}
@end
到目前为止的结果是:
从左到右:
UIView
,图像的bg是透明的。 kCGBlendModeMultiply
kCGBlendModeColorBurn
进行彩色刻录是否有一个
CGBlendMode
可实现替换前景色?另外,是否可以同时替换前景色(白色)和阴影(黑色)? 最佳答案
弄乱了不同的混合选项后,此代码成功了。唯一需要注意的是,阴影中显示了红色,它在技术上不是正确的,但它的封闭感很强。
@implementation UIImage (Coloring)
-(UIImage*) imageWithColorOverlay:(UIColor*)color
{
//create context
UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);
CGContextRef context = UIGraphicsGetCurrentContext();
//drawingcode
//bg
CGRect rect = CGRectMake(0.0, 0.0, self.size.width, self.size.height);
[self drawInRect:rect];
//fg
CGContextSetBlendMode(context, kCGBlendModeMultiply);
CGContextSetFillColorWithColor(context, color.CGColor);
CGContextFillRect(context, rect);
//mask
[self drawInRect:rect blendMode:kCGBlendModeDestinationIn alpha:1.0];
//end
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
关于ios - 使用混合图像着色/遮盖前景,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18006520/