Pergunta

Eu estou tentando construir um WPF DrawingBrush que vai chamar um teste padrão do portal usando dois 1px por 1px retângulos. O padrão resultante seria parecido com o fundo em aplicações clássicas de Macintosh.

Aqui está o que eu estou trabalhando com:

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

Tudo parece clara e nítida, com exceção de que as caixas são demasiado grande. Como eu ajustar o Viewport na escova, as coisas começam a ficar embaçada. Parece que o anti-aliasing é o que está me matando; ele quer usar 3px a desvanecer-se de verde sólido para nada, que não funciona quando eu chegar a tamanhos abaixo 3-4px. Existe algo que eu possa fazer para totalmente desativar o anti-aliasing e fazer o desenho com precisão de pixel?

Foi útil?

Solução

Offset o desenho com 0.5px e você vai se livrar do efeito anti-aliasing. Isso acontece porque o desenho é feito na borda do pixel offset, em vez do pixel real deslocamento que você especificou. Por offset'ing X, Y com metade de um pixel, você diz ao motor de desenho para desenhar no próprio pixel, o que elimina a necessidade de antialiasing.

Por alguma razão isso não funciona com gradientbrushes embora.

Este comportamento é semelhante ao que você tem em Quarts desenho no Mac.

Nota:. É de não o visor que você deve compensar, mas a forma real que você está desenhando ao usar o pincel especificado

Para uma resposta mais completa, por favor ler este artigo .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top