2009-05-19 8 views
1

J'essaie de créer un dessin WPF qui dessinera un motif de hachures en utilisant deux rectangles 1px par 1px. Le modèle résultant ressemblerait à l'arrière-plan sur les applications Macintosh classiques.Dessiner un pinceau Hatch 2px dans WPF

Voici ce que je travaille avec:

<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> 

Tout semble clair et net, sauf que les boîtes sont trop grandes. Lorsque j'ajuste le Viewport sur le pinceau, les choses commencent à devenir floues. On dirait que l'anti-aliasing est ce qui me tue; il veut utiliser 3px pour passer du vert uni à rien, ce qui ne fonctionne pas quand j'arrive à des tailles inférieures à 3-4px. Y at-il quelque chose que je peux faire pour désactiver totalement l'anti-aliasing et faire un dessin au pixel près?

Répondre

1

Décalez le dessin avec 0.5px et vous éliminerez l'effet anti-crénelage. Cela arrive parce que le dessin est fait sur le bord du décalage de pixel, plutôt que sur le décalage de pixel réel que vous avez spécifié. En décalant X, Y avec un demi-pixel, vous dites au moteur de dessin de dessiner sur le pixel lui-même, ce qui élimine le besoin d'anti-crénelage.

Pour une raison quelconque, cela ne fonctionne pas avec les dégradographes.

Ce comportement est similaire à celui que vous avez dans le dessin de quarts sur Mac.

Remarque: n'est pas la fenêtre que vous devez décaler, mais la forme que vous dessinez lorsque vous utilisez le pinceau spécifié.

Pour une réponse plus complète, veuillez read this article.

Questions connexes