在CGContext上绘制部分透明的图像
我在前台和透明背景中有一个黄色花瓶的图像:
我正在CGContext上绘制它:
CGContextDrawImage(context, CGRectMake(0, 0, 100, 100), myImage.CGImage);
我可以在CGContextDrawImage
之前使用下面的语句在它周围画一个阴影:
CGContextSetShadowWithColor(context, CGSizeMake(0,0), 5, [UIColor blueColor].CGColor);
但是我想在图片上放一下,所以它看起来像下面这样:
如果我这样做:
CGContextSetRGBStrokeColor(shadowContext, 0.0f, 0.0f, 1.0f, 1.0f); CGContextSetLineWidth(shadowContext, 5); CGContextStrokeRect(shadowContext, CGRectMake(0, 0, 100, 100));
它(显然)在整个图像周围绘制一个矩形边框,如下所示:
这不是我所需要的。
但是,在第三个图像中绘制边界的最好方法是什么?
请注意,在这种情况下不可能使用UIImageView,所以使用UIImageView的CALayer属性是不适用的。
一种方法是使用膨胀的math形态学算子向外“生长”图像的alpha通道,然后使用生成的灰度图像作为掩模来模拟笔划。 通过填充扩张的面具,然后在主要的图像上绘制,你会得到中风的效果。 我已经创build了一个演示,展示了这种效果,可以在Github上find: https : //github.com/warrenm/Morphology (所有的源代码都是麻省理工学院许可的,应该certificate对你有用)。
下面是它的一个截图:
请注意,这是非常慢的(膨胀需要对每个像素进行一次内核迭代),所以您应该事先select一个笔划宽度并为每个源图像预先计算蒙版图像。
我会尝试在调用CGContextDrawImage
之前设置笔触颜色和线宽,或者调整阴影(不透明度,模糊等),使其看起来像图像周围的笔触。 让我知道这个是否奏效!