首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在CGContext上绘制的部分透明图像周围放置边框

在CGContext上绘制的部分透明图像周围放置边框
EN

Stack Overflow用户
提问于 2013-02-16 04:00:52
回答 2查看 4.4K关注 0票数 22

我有一张前景为黄色花瓶,背景透明的图片:

我把它画在CGContext上:

代码语言:javascript
复制
CGContextDrawImage(context, CGRectMake(0, 0, 100, 100), myImage.CGImage);

通过在CGContextDrawImage之前使用以下语句,我可以在它周围画一个阴影

代码语言:javascript
复制
CGContextSetShadowWithColor(context, CGSizeMake(0,0), 5, [UIColor blueColor].CGColor);

但我想在图像周围画一笔,这样它看起来就像下面这样:

如果我这样做:

代码语言:javascript
复制
CGContextSetRGBStrokeColor(shadowContext, 0.0f, 0.0f, 1.0f, 1.0f);
CGContextSetLineWidth(shadowContext, 5);
CGContextStrokeRect(shadowContext, CGRectMake(0, 0, 100, 100));

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

这不是我想要的。

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-22 03:46:15

为此,一种方法是使用mathematical morphology operator of dilation向外“增长”图像的alpha通道,然后使用生成的灰度图像作为遮罩来模拟笔划。通过填充放大的蒙版,然后在顶部绘制主图像,您将获得笔划的效果。我已经创建了一个演示来展示这个效果,可以在Github上找到:https://github.com/warrenm/Morphology (所有源代码都是麻省理工学院许可的,如果它对你有用的话)。

这是它实际运行的屏幕截图:

请注意,这是惊人的缓慢(膨胀需要在每个像素上迭代内核),因此您应该选择笔划宽度并预先为每个源图像预先计算蒙版图像。

票数 16
EN

Stack Overflow用户

发布于 2013-02-21 03:06:56

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14902444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档