好的,我已经创建了一个透明的PNG-24。它基本上是一个灰度图像,在黑色和透明之间使用"颜色",而不是黑色和白色。我这样做是为了把它作为一个彩色矩形的不透明度蒙版,这样我就可以用一个单独的图形来渲染任何我想要的颜色。
然而,对于我的生命,我不能让WPF停止反混叠的da*n图像!!
我已经在画笔应用的矩形上设置了'SnapesToDevicePixels'…我已经将ImageBrush的缩放设置为"None"…我已经将它的ViewPort和ViewBox设置为绝对单位,并将它们精确地设置为源图像的大小。但是不管我怎么努力,WPF还是坚持要把事情解决!这是非常令人沮丧的!
所以…有人知道如何使用图像作为不透明度蒙版,但不会失去我们所做的像素精确绘图吗?我只希望WPF能像我们画的那样渲染这该死的东西,句号!
我试图重现您的问题。就像这样:
<Rectangle Width="200" Height="200" Fill="Red">
<Rectangle.OpacityMask>
<ImageBrush ImageSource="/mask.png"/>
</Rectangle.OpacityMask>
</Rectangle>
mask.png包含一个简单的对角蒙版,比如一半的矩形是可见的,另一半是100%透明的。矩形渲染像素完美(和别名,如您所愿)。我想,你可能有一个DPI设置,这不是你的显示器的原生设置,WPF就是不能正确渲染图像。
明白了!这是一个布局问题,由于某种原因,没有简单的方法来改变。然而,你可以设置一个名为uselayoutounting的值来修复它。我只是把它设置在根级别(对于这个假示例,一个网格…)
<Grid UseLayoutRounding="True">
....
</Grid>
…和BAM !真是妙不可言!"Sort of"类似于"SnapsToDevicePixels",但用于元素的定位(即它舍入所有与布局相关的值,如left, width等,而SnapsToDevicePixels在渲染时将布局捕捉到屏幕像素)