2009-05-19 4 views
1

2つの1ピクセル×1ピクセルの長方形を使用してハッチングパターンを描画するWPF DrawingBrushを作成しようとしています。結果として得られるパターンは、従来のMacintoshアプリケーションのバックグラウンドのように見えます。WPFで2ピクセルのハッチブラシを描画する

は、ここに私が働いているものです:

<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.5pxで図面をオフセットすると、アンチエイリアシング効果がなくなります。描画は、指定した実際のピクセルオフセットではなく、ピクセルオフセットのエッジで行われるために発生します。 X、Yを半分のピクセルでオフセットすることによって、描画エンジンにピクセル自体を描画するように指示するので、アンチエイリアスが不要になります。

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

この動作は、MacでのQuartsの描画に似ています。

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

もっと完全な回答については、read this articleをご覧ください。

関連する問題