代码之家  ›  专栏  ›  技术社区  ›  Armentage

在WPF中绘制2px图案填充笔刷

  •  1
  • Armentage  · 技术社区  · 16 年前

    我正在尝试构建一个WPF DrawingBrush,它将使用两个1px x 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时,这就不起作用了。我能做些什么来完全禁用抗锯齿并进行像素精确绘制?

    1 回复  |  直到 13 年前
        1
  •  1
  •   Ludvig A. Norin    15 年前

    使用0.5px偏移图形,将消除抗锯齿效果。之所以会出现这种情况,是因为绘制是在像素偏移的边缘上完成的,而不是在指定的实际像素偏移上完成的。通过用半个像素偏移X,Y,您可以告诉绘图引擎在像素本身上绘图,这就消除了抗锯齿的需要。

    这种行为类似于您在Mac上绘制的夸脱数。

    应该偏移的视口,但使用指定笔刷绘制的实际形状。

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