如何在wpf中创建不可缩放的不透明蒙版?

时间:2011-04-07 08:59:32

标签: wpf antialiasing imagebrush opacitymask snapstodevicepixels

好的,我已经创建了一个透明的PNG-24。它基本上是一个灰度图像,在黑色和透明之间使用“颜色”而不是黑色和白色。我做了这个,所以我可以用它作为彩色矩形的不透明蒙版,从而使用任何颜色渲染图像只使用一个图形。

然而,对于我的生活,我无法让WPF停止对da * n图像的抗锯齿!!

我在应用画笔的矩形上​​设置了'SnapesToDevicePixels'...我已将ImageBrush的Scale设置为'None'...我已将其ViewPort和ViewBox设置为绝对单位和大小他们完全是源图像。但无论我尝试什么,WPF仍坚持试图让事情顺利进行!这非常令人沮丧!

所以...任何人都知道如何使用图像作为不透明蒙版但不会丢失我们已经完成的像素精确绘图?我只是想让WPF在我们画画的时候渲染该死的东西,期间!

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

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

......和BAM!奇迹般有效! &#34;排序&#34;喜欢&SnapToDevicePixels&#39;但是对于元素的定位(即它舍入所有与布局相关的值,如左,宽等等,而SnapsToDevicePixels在渲染时将布局捕捉到屏幕上的像素。)

中号