1

2 つの 1px x 1px の長方形を使用してハッチング パターンを描画する WPF DrawingBrush を構築しようとしています。結果のパターンは、従来の 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 を 1/2 ピクセルでオフセットすることにより、描画エンジンにピクセル自体を描画するように指示します。これにより、アンチエイリアシングの必要がなくなります。

ただし、何らかの理由で、これはグラデーションブラシでは機能しません。

この動作は、Mac で Quarts を描画する場合と似ています。

注: オフセットするのはビューポートではなく、指定したブラシを使用して描画している実際の形状です。

より完全な回答については、この記事をお読みください

于 2009-10-04T01:34:42.273 に答える