用直线和曲线抗锯齿

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

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

显示彩色背景上纯红色像素的插图

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

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

显示同一背景上红色阴影的像素的插图

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

白色背景上由不同蓝色像素阴影组成的椭圆图

下图显示了同一椭圆形的实际大小,一次未应用抗锯齿,一次应用抗锯齿。

两个省略号的屏幕截图:具有抗锯齿效果的省略号明显更平滑

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

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

SmoothingModeAntiAliasSmoothingMode 枚举的元素。