我已经实现了一个典型的洪水填充算法,当使用纯色时,它按预期工作,其中我使用 ARGB 分量之间的欧几里德距离来比较颜色。
我的问题是,如果您在透明背景上绘制类似抗锯齿红线的内容,我的洪水填充算法将不会填充大多数半透明像素,从而在对象周围留下条纹。具体来说,对于此示例,线条的中心为纯红色(即 ARGB 格式中的 (255, 255, 0, 0)),线条的边缘也是纯红色,但这些像素的 alpha 范围低至 1% alpha (即 (1, 255, 0, 0))。一般来说,我希望能够绘制抗锯齿圆形轮廓,在中心进行洪水填充,并且不让它留下边缘。
我应该使用什么函数来比较颜色和/或如何调整洪水填充算法,以便在对象周围不会留下此类条纹?
我尝试告诉算法,如果 alpha
编辑:为了详细说明它的外观,其中 0 - 5 代表红色像素 a 0、20、40、60、80 和 100% alpha,抗锯齿红线的图像可能如下所示:
0 0 0 0 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 0 0 0
我当前的洪水填充算法在左上角填充红色,会将所有 0 替换为 5。剩下的 3 会在线周围形成一个丑陋的光环。
您的洪水填充应替换颜色的 RGB 部分,但保留原始 Alpha。这样您就可以在不改变混合比例的情况下获得新的颜色。
(如果您的位图使用预乘 Alpha,那么您应该按现有 Alpha 缩放替换 RGB,但在您的示例中,您没有使用预乘 Alpha。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)