1

我有一组非常有效的水平和垂直线条绘图功能,每个周期可以绘制许多像素(水平一个,~4 像素/周期,垂直一个~0.25 像素/周期。)我正在使用 Bresenham 的线条绘图绘制任意线的算法。但是,这涉及调用单个绘制像素例程,该例程相对较慢(~0.03 像素/周期。)

我注意到 Bresenham 算法绘制的大多数线条都显示了水平和垂直条带,它们之间的距离很远。有谁知道是否可以将这些对 DrawPixel 的单独调用替换为对 DrawHoriz 和 DrawVert 绘图例程的调用?有人有代码示例吗?我已经尝试过了,但我的成功有限,主要是导致输出中断 - 我怀疑我以错误的方式接近它。

非常感谢

4

1 回答 1

2

Bresenham 算法通常实现为一组四种特殊情况,具体取决于线斜率的符号和大小(陡正、陡负、浅正、浅负)。在陡峭的情况下,您最终会绘制一堆垂直线段,每个移动一个水平像素;对于浅的,它是水平线。

当您计算线坐标时,您将移动较快的一个(y 表示陡峭的情况,x 表示浅的情况)并计算另一个坐标中的累积误差;当累积误差达到 1 时,您将其更改为下一个值。那么,如果您运行正常的 Bresenham 算法,计算所有像素,但随后不是绘制每个像素,您只需为给定的“快速”坐标绘制线从“慢”坐标的开始到结束——如果你知道我的意思。换句话说,您只是在慢坐标改变时绘制,而不是在每个循环中绘制,就在您将其撞到下一个值之前。

是的,我相信这会奏效。我不知道它是否会更快,但它肯定会起作用。

于 2011-03-17T00:42:12.433 回答