装饰线条
整形线始终为一个像素宽,并使用纯色画笔绘制。 它根据网格交集量化 (GIQ) 菱形约定进行呈现,该约定确定应打开哪些像素来呈现修饰线。
下图显示了一条叠加在矩形网格上的线条,其中像素位于网格交点处。 若要确定应照亮哪些像素,请想象一个菱形,以线条为中心,沿它滑动。 菱形的宽度和高度完全等于相邻像素中心之间的距离。 当菱形沿线移动时,将打开中心完全覆盖菱形的任何像素。 如果一条线穿过两个相邻像素之间的一个点,则要打开的像素取决于线条的斜率和相邻像素的方向方式:水平 (并排) ,或垂直 (另一个) 。
下表总结了这些情况。
直线 (绝对值) 的斜率 | 相邻像素方向 | 结果 |
---|---|---|
斜率 < 1 |
水平旋转 |
点亮菱形左顶点的像素。 |
斜率 < 1 |
垂直 |
点亮菱形顶点的像素。 |
斜率 = 1 |
水平旋转 |
点亮菱形顶点的像素。 |
斜率 = 1 |
垂直 |
点亮菱形右顶点的像素。 |
对于斜率介于 -1 和 1 之间的线条,菱形约定为每个列中的一个像素点亮;对于绝对值斜率大于 1 的线条,每行中为一个像素。 这样,将呈现无间隙的修饰线。
修饰线的开始和结束像素也由菱形约定决定。 整形线是第一个像素(非独占像素)和“最后像素排他性”;也就是说,如果线条从某个像素的菱形内部开始,该像素将被照亮。 同样,如果线条在菱形内结束一个像素,则不会照亮该像素。
下图演示了整形线的菱形约定。
对于呈现修饰线, DrvStrokePath 函数遵循 GIQ 菱形约定。 DrvLineTo 函数是一个可选的入口点,驱动程序可以提供该入口点作为对 Microsoft Win32 LineTo 函数的应用程序调用的优化。 DrvLineTo 比 DrvStrokePath 更简单,因为它仅支持整数终点和实线整形线。
对于支持R2_NOT混合模式的光栅设备(将目标颜色更改为反的二进制光栅操作),驱动程序必须使用精确呈现。 对于需要通过 GDI 和驱动程序进行呈现的设备,呈现也应该是精确的。 这包括 GDI 在某些位图上绘制的设备,驱动程序在 (的其他图面上绘制,除非像素太小而无法) 产生任何明显差异。 这还包括请求 GDI 处理复杂剪辑的设备。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈