将多个抗锯齿线连接在一起

时间:2011-04-20 06:08:05

标签: c algorithm graphics drawing antialiasing

我在wiki-pedia和其他地方的伪代码中实现/复制了wu line算法。

当绘制正弦波时,它会在线从y显性变为x显性点(反之亦然)时发生故障。 (我没有复制端点代码,因为它看起来很糟糕,我不需要它们。)

有没有人知道这个问题的解决方案?如果不是,我将自己修改算法以使其工作。我只是好奇是否有其他人遇到过这个并且确切地知道如何修复它。是否有可能在没有线路彼此全局意识的情况下实施?或者这就是绘制API的实现moveto和lineto函数的原因?

The pseudo code

2 个答案:

答案 0 :(得分:1)

如果性能不是一个大问题,你可以采用更天真的方法来绘制抗锯齿线,例如:

  • 以更高分辨率的网格绘制线条(例如,目标分辨率的某个整数倍) - 您需要调整它们的厚度。
  • 通过将每个n x m像素的块转换为单个像素,例如,将目标分辨率降低到目标分辨率。通过平均RGB值。

根据您正在开发的语言或操作系统,可能有内置功能来简化此操作。

或者,您可以计算线条覆盖每​​个像素的哪个部分(通过将像素正方形与线相交)来计算像素值,使像素强度相对于线条所覆盖的像素区域部分。

答案 1 :(得分:1)

我只是想跟进这个并将其关闭。我以为我已经从网站上发布的算法中删除了端点代码。但是,我犯了一个错误,并没有删除所有这些,所以这就是线条破裂的原因。这是最终结果:

如果仔细观察,当线条从y显性变为x显性时,可以看到强度跳跃,反之亦然。这也是因为线长度小于一个像素。我想以更高的分辨率绘制一条线,然后下采样将产生更高质量的结果,如Guy Sirton建议的那样。但这对我的目的来说足够好了。