我正在尝试构建一个WPF DrawingBrush,它将使用两个1px x 1xx矩形绘制填充图案。生成的模式看起来像是经典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以下的尺寸时,这不起作用。有什么办法可以完全禁用抗锯齿并进行像素精确绘图吗?
答案 0 :(得分:1)
使用0.5px偏移绘图,您将摆脱抗锯齿效果。这是因为绘制是在像素偏移的边缘完成的,而不是在您指定的实际像素偏移上完成的。通过将半个像素的X,Y偏移,您可以告诉绘图引擎在像素本身上绘制,这样就不需要抗锯齿。
出于某种原因,这不适用于渐变刷。
此行为与您在Mac上的Quarts绘图中的行为类似。
注意:不是您应该偏移的视口,而是使用指定画笔时绘制的实际形状。
如需更完整的答案,请read this article。