我已经实现了一个典型的泛洪填充算法,当我使用ARGB组件之间的欧几里得距离来比较颜色时,它可以像预期的那样使用纯色。
我的问题是,如果你在透明背景上绘制一条抗锯齿的红线,我的泛洪填充算法不会填充大多数半透明像素,而是在对象周围留下条纹。具体地说,对于该示例,线的中心是实心红色(即ARGB格式的(255,255,0,0)),并且线的条纹也是实红的,但是这些像素的α范围下至1%α(即(1,255,0,0) )。一般来说,我希望能够绘制一个抗锯齿的圆圈轮廓,泛洪填充中心,而不是留下边缘。
我使用什么函数来比较颜色和/或如何调整泛洪填充算法,使这些条纹不会留在物体周围?
我试着告诉算法总是填充一个像素,如果它的alpha <90%,这有时看起来还可以,但它在填充模糊的线条时太激进了。
编辑:为了详细说明这是什么样子,其中0-5表示红色像素0,20,40,60,80和100% alpha,抗锯齿红线的图像可能如下所示:
0 0 0
0 0 0 3 0 0 0
0 0 3 5 3 0 0
0 0 3 5 3 0 0
0 0 3 5 3 0 0
0 0 0 3 0 0 0
0 0 0
我目前的泛洪填充算法在左上角填充红色,将所有的0替换为5。剩下的3在线条周围形成一个丑陋的光环。
发布于 2011-05-22 21:56:41
整体应用填充应替换颜色的RGB部分,但保留原始alpha。这样你就可以在不改变混合比例的情况下获得新的颜色。
(如果位图使用预乘alpha,则应按现有alpha缩放替换RGB,但在示例中,不使用预乘alpha。)
https://stackoverflow.com/questions/6087838
复制相似问题