在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之前设置笔触颜色和线宽,或者调整阴影(不透明度,模糊等),使其看起来像图像周围的笔触。 让我知道这个是否奏效!