用直线和曲线抗锯齿

使用Windows GDI+绘制线条时,可以提供线条的起点和终点,但不必提供有关行上各个像素的任何信息。 GDI+与显示驱动程序软件结合使用,以确定将打开哪些像素以显示特定显示设备上的行。

假设一条从点 (4、2) 到点 (16、10) 的直线。 假定坐标系统在左上角有其原点,度量单位是像素。 另假设 x 轴指向右侧,y 轴向下点。 下图显示了在彩色背景上绘制的红线的放大视图。

illustration showing solid red pixels on a multicolored background

请注意,用于呈现线条的红色像素不透明。 显示线条时不涉及部分透明像素。 这种类型的线条呈现使线条出现杂杂的外观,线条看起来有点像楼梯。 用楼梯表示线条的这种技术称为别名:楼梯是理论线的别名。

呈现线条的更复杂技术涉及使用部分透明像素以及纯红色像素。 像素设置为纯红色或红色和背景色的混合,具体取决于它们与线条的距离。 这种类型的渲染称为抗锯齿,并导致人眼认为更光滑的线条。 下图显示了如何将某些像素与背景混合以生成抗锯齿线。

illustration showing pixels that are shades of red on the same background

反锯齿 (平滑) 也可以应用于曲线。 下图显示了平滑椭圆的放大视图。

illustration of an ellipse made up of different shades of blue pixels on a white background

下图显示了其实际大小的相同省略号,一次没有抗锯齿,一次使用抗锯齿。

screen shot of two ellipses: the one with antialiasing appears noticably smoother

若要绘制使用抗锯齿的线条和曲线,请创建图形对象并将 SmoothingModeAntiAlias 传递给其 Graphics::SetSmoothingMode 方法。 然后调用同一 图形 对象的绘图方法之一。

myGraphics.SetSmoothingMode(SmoothingModeAntiAlias);
myGraphics.DrawLine(&myPen, 0, 0, 12, 8);

SmoothingModeAntiAliasSmoothingMode 枚举的元素。