线

线条是光栅显示(或打印页上的一组点)上突出显示的像素集,由两个点标识:起点和终点。 位于起点的像素始终包含在行中,并且位于终点的像素始终被排除。 (这种行有时称为包容性排他性。

当应用程序调用其中一个折线图函数、图形设备接口(GDI)或在某些情况下,设备驱动程序确定应突出显示哪些像素。 GDI 是一个动态链接库(DLL),它处理来自应用程序的图形函数调用并将这些调用传递给设备驱动程序。 设备驱动程序是一个 DLL,从 GDI 接收输入,将输入转换为设备命令,并将这些命令传递给相应的设备。 GDI 使用数字差异分析器(DDA)来确定定义线条的像素集。 DDA 通过检查线条上的每个点并识别与点相对应的显示图面(或打印页上的点)上的这些像素来确定像素集。 下图显示了一行、其起点、终点以及使用简单 DDA 突出显示的像素。

图,显示沿线条的像素网格、起始点和结束点、线条和底纹

最简单的最常见的 DDA 是布雷森汉姆或增量 DDA。 此算法的修改版本在 Windows 中绘制线条。 增量 DDA 为简单起见而指出,但它也因其不准确而指出。 由于它将舍入到最接近的整数值,因此有时它无法表示应用程序请求的原始行。 GDI 使用的 DDA 不会舍入到最接近的整数。 因此,这个新的 DDA 会生成输出,这些输出有时更接近应用程序请求的原始行的外观。

注意

如果应用程序需要无法通过新 DDA 实现的行输出,则可以通过调用 LineDDA 函数并提供专用 DDA(LineDDAProc)来绘制自己的线条。 但是,LineDDA 函数绘制的线条比线条绘制函数慢得多。 如果速度是主要考虑因素,请不要在应用程序中使用此函数。

 

应用程序可以使用新的 DDA 绘制单行和多个连接的线段。 应用程序可以通过调用 LineTo 函数来绘制单行。 此函数从当前位置向上绘制一条线,但不包括指定的结束点。 应用程序可以通过调用 折线 函数来绘制一系列连接的线段,并提供指定每个线段结束点的点数组。 应用程序可以通过调用 PolyPolyline 函数(提供所需的结束点)来绘制多个脱节的连线段。

下图显示了通过调用 LineTo折线PolyPolyline 函数创建的行输出。

显示直线、“l”形状框和显示三维插图