帮助着色由图像蒙版/边界定义的图层并将图像叠加在顶部

时间:2011-08-06 11:58:56

标签: iphone objective-c ios ios4 core-graphics

我目前正在尝试为客户端创建头像创建iOS应用程序,在某些时候用户应该可以选择更改项目的颜色。

客户端提供要以.png格式着色的图库项目,并照常使用不同的alpha / opacity值,以有效地生成阴影。然而,项目着色的正确最终结果是不掩盖图像并应用颜色混合,因为透明区域保持原样,而是“填充”项目的“外部笔划”所包围的背景区域,然后重新绘制图像。因此阴影适用于新颜色。

这是我取得的成就:

UIImage *image =  item.image;
UIGraphicsBeginImageContext(image.size);

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetInterpolationQuality(context, kCGInterpolationHigh);

CGRect area = CGRectMake(0, 0, image.size.width, image.size.height);

CGContextScaleCTM(context, 1, -1);
CGContextTranslateCTM(context, 0, -area.size.height);

CGContextSaveGState(context);

// This applies the colorization only on the image mask 
//CGContextClipToMask(context, area, image.CGImage);

[[UIColor redColor] set];
CGContextFillRect(context, area);

CGContextRestoreGState(context);

CGContextSetBlendMode(context, kCGBlendModeNormal);

CGContextDrawImage(context, area, image.CGImage);

UIImage *coloredImg = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

item.image = coloredImg;

产生以下结果。

http://dl.dropbox.com/u/1237004/Screen%20shot%202011-07-15%20at%207.53.50%20%CE%BC.%CE%BC..png

这基本上接近我真正想要达到的目标,除了红色区域扩展到裤子外面。

那么如何消除那部分呢?我想到的可能是将alpha值降低到未由图像掩码定义的区域或类似的区域,但无法接近解决方案。

谢谢大家的建议。

注意:屏幕截图中显示的项目是WeeMee头像创建应用程序的一部分,不是在我们的应用程序中使用,而是我的实验的一部分,并且所有权利属于它的各自所有者

1 个答案:

答案 0 :(得分:0)

您需要做的是设置剪切路径,并指示CG仅在内部区域内填充。如果您已经绘制了定义裤子的路径,那对您来说应该是微不足道的。

参见本教程: tutorial

更新以回应评论:

Masking an image