1

我正在尝试构建一个 WPF DrawingBrush,它将使用两个 1px x 1px 矩形绘制一个填充图案。生成的图案看起来就像经典 Macintosh 应用程序的背景。

这是我正在使用的:

<Canvas SnapsToDevicePixels="True">
    <Canvas.Background>
        <DrawingBrush x:Name="gridBackgroundBrush" 
        Viewport="0,0,10,10"            
        ViewportUnits="Absolute"
        TileMode="Tile">
          <DrawingBrush.Drawing>
            <DrawingGroup>
              <DrawingGroup.Children>                                   
                <GeometryDrawing Geometry="M0,0 L10,0 10,10, 0,10Z" Brush="Green"/>                 
                <GeometryDrawing Geometry="M10,10 L20,10 20,20, 10,20Z" Brush="Green" />                                
              </DrawingGroup.Children>
            </DrawingGroup>
          </DrawingBrush.Drawing>
        </DrawingBrush>
    </Canvas.Background>
</Canvas>

一切看起来都清晰锐利,除了盒子太大了。当我调整画笔上的视口时,事情开始变得模糊。看起来抗锯齿正在杀死我;它想使用 3px 从纯绿色淡化为无,当我的尺寸低于 3-4px 时,这不起作用。我能做些什么来完全禁用抗锯齿并进行像素精确绘图吗?

4

1 回答 1

1

将绘图偏移 0.5px,您将摆脱抗锯齿效果。这是因为绘图是在像素偏移的边缘完成的,而不是在您指定的实际像素偏移上。通过将 X、Y 偏移半个像素,您可以告诉绘图引擎在像素本身上进行绘图,从而消除了抗锯齿的需要。

出于某种原因,这不适用于渐变画笔。

此行为类似于您在 Mac 上的 Quarts 绘图中的行为。

注意:您应该偏移的不是视口,而是您使用指定画笔绘制的实际形状。

如需更完整的答案,请阅读本文

于 2009-10-04T01:34:42.273 回答