在WPF中绘制2px Hatch画笔

时间:2009-05-19 14:33:34

标签: wpf brush

我正在尝试构建一个WPF DrawingBrush,它将使用两个1px x 1xx矩形绘制填充图案。生成的模式看起来像是经典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以下的尺寸时,这不起作用。有什么办法可以完全禁用抗锯齿并进行像素精确绘图吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

如需更完整的答案,请read this article