我已经实现了一个典型的洪水填充算法,当我使用 ARGB 组件之间的欧几里德距离来比较颜色时,它在使用纯色时按预期工作。
我的问题是,如果您在透明背景上绘制抗锯齿红线之类的东西,我的泛光填充算法将不会填充大多数半透明像素,从而在对象周围留下条纹。特别是对于这个例子,线条的中心是纯红色(即 ARGB 格式的 (255, 255, 0, 0)),线条的边缘也是纯红色,但这些像素的 alpha 范围低至 1% alpha (即 (1, 255, 0, 0))。一般来说,我希望能够绘制一个抗锯齿的圆形轮廓,在中心填充填充而不让它留下边缘。
我使用什么函数来比较颜色和/或如何调整泛光填充算法,以便不会在对象周围留下这样的边缘?
我试过告诉算法,如果它的 alpha <90%,总是填充一个像素,这有时看起来不错,但它在填充微弱的线条时过于激进。
编辑:为了详细说明 0 - 5 代表红色像素 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 会在线周围形成一个难看的光环。