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

Optimization 通过绘制许多水平线和垂直线而不是像素来优化Bresenham,optimization,drawing,bresenham,Optimization,Drawing,Bresenham,我有一套非常高效的水平和垂直线条绘制功能,每个周期可以绘制许多像素(对于水平线条,约4像素/周期,而垂直线条,约0.25像素/周期)。我使用Bresenham的线条绘制算法绘制任意线条。但是,这需要调用单绘制像素例程,该例程相对较慢(~0.03像素/周期) 我注意到Bresenham算法绘制的大多数线条都显示水平和垂直条带,它们之间有很好的距离。是否有人知道是否可以将这些对DrawPixel的单独调用替换为对DrawHoriz和DrawVert绘图例程的调用?有人有代码示例吗?我已经试过了,但成

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

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


非常感谢

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

在计算直线坐标时,移动速度越快(陡峭的情况下为y,较浅的情况下为x),然后计算其他坐标中的累积误差;当累积错误达到1时,将其更改为下一个值。那么,如果你运行一个普通的Bresenham算法,计算所有的像素,但不是画每个像素,而是从“慢”坐标的开始到结束画一条给定的“快”坐标的线——如果你知道我的意思的话。换言之,不是在每个周期进行绘制,而是在缓慢坐标改变时进行绘制,就在将其凹凸到下一个值之前


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

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

在计算直线坐标时,移动速度越快(陡峭的情况下为y,较浅的情况下为x),然后计算其他坐标中的累积误差;当累积错误达到1时,将其更改为下一个值。那么,如果你运行一个普通的Bresenham算法,计算所有的像素,但不是画每个像素,而是从“慢”坐标的开始到结束画一条给定的“快”坐标的线——如果你知道我的意思的话。换言之,不是在每个周期进行绘制,而是在缓慢坐标改变时进行绘制,就在将其凹凸到下一个值之前


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

请确保您了解DrawHoriz和DrawVert会影响哪些像素。在某些图形系统中,从10到20绘制10个像素,在其他图形系统中绘制11个像素。只需确保您了解哪些像素受DrawHoriz和DrawVert的影响。在某些图形系统中,从10到20绘制10个像素,在其他图形系统中绘制11个像素。