0

好的,我创建了一个具有透明度的 PNG-24。它基本上是一个灰度图像,它使用黑色和透明之间的“颜色”而不是黑色和白色。我这样做是为了可以将其用作彩色矩形的不透明度蒙版,从而仅使用单个图形以我想要的任何颜色渲染图像。

但是,对于我的生活,我无法让 WPF 停止对 da*n 图像进行抗锯齿!!

我已经在应用画笔的矩形上​​设置了“SnapesToDevicePixels”...我已经将 ImageBrush 的 Scale 设置为“None”...我已经将其 ViewPort 和 ViewBox 设置为绝对单位并将它们的大小精确到源图像。但无论我怎么尝试,WPF 仍然坚持试图让事情变得顺畅!这非常令人沮丧!

所以......有人知道如何使用图像作为不透明蒙版,但不会丢失我们所做的像素精确绘图吗?我只是想让 WPF 在我们绘制它时渲染该死的东西,期间!

4

2 回答 2

2

我试图重现你的问题。就像这样:

        <Rectangle Width="200" Height="200" Fill="Red">
            <Rectangle.OpacityMask>
                <ImageBrush ImageSource="/mask.png"/>
            </Rectangle.OpacityMask>
        </Rectangle>

mask.png 包含一个简单的对角线蒙版,就像矩形的一半是可见的,而另一半是 100% 透明的。并且 recrangle 正在渲染像素完美(以及别名,如您所愿)。我认为,您可能是 DPI 设置,这不是您显示器的原生设置,而 WPF 无法正确渲染图像。

于 2011-04-07T11:09:03.133 回答
1

知道了!这是一个布局问题,由于某种原因,没有简单的方法可以改变。但是,您可以设置一个名为 UseLayoutRounding 的值来修复它。我只是将它设置在根级别(对于这个假样本,一个网格......)

<Grid UseLayoutRounding="True">
    ....
</Grid>

...和 ​​BAM!奇迹般有效!“有点”类似于“SnapsToDevicePixels”,但用于定位元素(即,它会舍入所有与布局相关的值,如左、宽度等,而 SnapsToDevicePixels 在渲染时将布局捕捉到屏幕像素。)

于 2011-04-07T16:03:05.503 回答