Dan*_*anM 7 graphics image-processing uiimage ios
我有一个应用程序,要求在部分透明的周围绘制一个纯黑色轮廓UIImage
.不是在图像的框架周围,而是围绕图像本身的所有不透明部分.即,想到一个透明的PNG,上面有一个不透明的白色"X" - 我需要用黑色勾勒出"X".
为了使问题更棘手,在绘制轮廓之后,将调整原始图像的不透明度,但轮廓必须保持不透明 - 因此我生成的轮廓必须仅包括轮廓,而不包括原始图像.
我目前的技术是这样的:
UIView
具有原始图像尺寸的新元素.UIImage
4次并将重复项添加为子视图UIView
,每个UIImage
偏移量从原始位置沿对角线偏移几个像素.UIView
转换为图像(通过典型UIGraphicsGetImageFromCurrentImageContext
方法).CGImageMaskCreate
和CGImageCreateWithMask
从这个新图像中减去原始图像,只剩下轮廓.有用.即使只有4个偏移图像,结果看起来也很不错.然而,它的效率非常低,并且在iPhone 4上造成了4秒的良好稳定延迟.
所以我需要的是一个很好,快速,有效的方法来实现同样的东西,iOS 4.0完全支持.
有什么好主意吗?:)
我想指出,虽然有些人建议边缘检测,但这不是一个合适的解决方案。边缘检测用于查找图像数据中的边缘,其中数据中没有明显的精确边缘表示。
对你来说,边缘更加明确,你正在寻找明确的轮廓。您的情况下的边缘是完全透明像素上和不完全透明像素旁边的任何像素,就这么简单!迭代图像中的每个像素,如果满足这些条件,则将它们设置为黑色。
或者,对于抗锯齿结果,获取图像的布尔表示,并传递一个小的抗锯齿圆核。我知道您说过不支持自定义过滤器,但如果您可以直接访问图像数据,那么手动实现并不难......
干杯,希望这有帮助。