我的图像前景是黄色花瓶,透明背景:
我在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属性不适用。
答案 0 :(得分:15)
执行此操作的一种方法是使用mathematical morphology operator of dilation向外“增长”图像的Alpha通道,然后使用生成的灰度图像作为模板来模拟笔划。通过填充扩张的面罩,然后将主图像绘制在顶部,您可以获得笔划的效果。我已经创建了一个演示此效果的演示,可以在Github上找到:https://github.com/warrenm/Morphology(所有来源都是MIT许可的,如果它对您有用)。
这是一个实际的截图:
请注意,这是非常缓慢的(扩张需要在每个像素上迭代内核),因此您应该选择笔划宽度并预先为每个源图像预先计算遮罩图像。
答案 1 :(得分:0)
我会尝试在调用CGContextDrawImage
之前设置笔触颜色和线宽,或调整阴影(不透明度,模糊等),使其看起来像图像周围的笔划。如果有效,请告诉我!