22

我在前景和透明背景中有一个黄色花瓶的图像:

在此处输入图像描述

我在 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));

它(显然)在整个 iamge 周围绘制一个矩形边框,如下所示:

在此处输入图像描述

这不是我需要的。

但是在第三张图片中绘制边框的最佳方法是什么?

请注意,在这种情况下无法使用 UIImageView,因此使用 UIImageView 的 CALayer 的属性不适用。

4

2 回答 2

16

一种方法是使用膨胀的数学形态学算子将图像的 alpha 通道向外“增长”,然后使用生成的灰度图像作为蒙版来模拟笔画。通过填充扩张的蒙版,然后在顶部绘制主图像,您可以获得中风的效果。我创建了一个演示这个效果的演示,可以在 Github 上找到:https ://github.com/warrenm/Morphology (所有源代码都是 MIT 许可的,如果它对你有用的话)。

这是它的截图:

在此处输入图像描述

请注意,这非常慢(膨胀需要在每个像素上迭代内核),因此您应该选择笔画宽度并提前为每个源图像预先计算掩码图像。

于 2013-02-21T19:46:14.870 回答
0

我会尝试在调用之前设置笔触颜色和线宽CGContextDrawImage,或者调整阴影(不透明度、模糊等),使其看起来像图像周围的笔触。让我知道这个是否奏效!

于 2013-02-20T19:06:56.273 回答