通过绘制许多水平和垂直线而不是像素来优化Bresenham

时间:2011-03-17 00:09:23

标签: optimization drawing bresenham

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

我注意到Bresenham算法绘制的大部分线条都显示水平和垂直条纹,它们之间有很好的距离。有没有人知道是否可以通过调用DrawHoriz和DrawVert绘图例程来替换对DrawPixel的这些单独调用?有人有代码示例吗?我已经尝试过了,但是我的成功有限,主要是导致产品损坏 - 我怀疑我接近它是错误的。

非常感谢

1 个答案:

答案 0 :(得分:1)

Bresenham算法通常被实现为一组四个特殊情况,取决于线的斜率的符号和幅度(陡峭的正面,陡峭的负面,浅正面,浅负面)。在陡峭的情况下,你最终绘制一串垂直线段,每个线段移动一个水平像素;对于浅的,它是水平线。

当你计算线坐标时,你会选择速度更快的一个(陡峭的情况为y,浅的情况为x),你计算另一个坐标的累积误差;当累积误差达到1时,你将它改为下一个值。那么,如果运行普通的Bresenham算法,计算所有像素,然后绘制每个像素,而不是绘制每个像素,你只需为给定的“快速”坐标绘制线条从“慢”坐标开始到结束 - 如果你知道我的意思。换句话说,您只是在慢速坐标发生变化时绘制,而不是在每个周期绘制,而是在将其逼近下一个值之前绘制。

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