【发布时间】:2011-08-30 13:53:02
【问题描述】:
我已经实现了一个典型的洪水填充算法,当我使用 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 会在线条周围形成一个难看的光环。
【问题讨论】:
标签: graphics image-processing antialiasing alphablending flood-fill