把边框部分透明的图片被绘制在CGContext上(Put border around partial

2019-07-20 00:04发布

我与在前景和背景透明黄色花瓶的图像:

我画它在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的属性是不适用的。

Answer 1:

这样做的一种方式是使用扩张的数学形态学算子来“生长”的图像的alpha通道向外,然后使用所产生的灰度图像作为掩模以模拟行程。 通过填充扩张的面具,然后画在上面的主图像,你会得到一个中风的效果。 我创建出这样的效果演示,可在Github这里: https://github.com/warrenm/Morphology (所有源MIT许可,应该证明给你有用)。

这里是它在行动截图:

请注意,这是惊人的慢(扩张需要一个内核在每一个像素的迭代),那么你应该选择一个笔划的宽度和预先计算掩模图像为每个源图像的提前。



Answer 2:

我会尝试要么将笔触颜色和线条宽度您的来电前CGContextDrawImage ,或调整阴影(不透明度,模糊等),所以它看起来像在图像周围中风。 让我知道这个是否奏效!



文章来源: Put border around partially transparent Image being drawn on CGContext