2011-04-07 123 views
0

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

但是,对于我的生活,我无法让WPF停止反锯齿的DA *图像!

我在应用画笔的矩形上​​设置了'SnapesToDevicePixels'...我将ImageBrush的Scale设置为'None'...我将ViewPort和ViewBox设置为绝对单位,将它们的尺寸精确设置为源图像。但不管我尝试什么,WPF仍然坚持尝试去平息事情!这是非常令人沮丧的!

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

+0

请发布您的代码,从经验来看,可能有一头房间里的大象看不到,别人会发现他们看到你的代码的那一刻,否则你很可能会在这里看到圈子里跑。 – Lazarus 2011-04-07 09:02:51

+0

@MarquelV:那么你不认为对象树中的问题可能会更高? – Lazarus 2011-04-07 09:51:32

+0

这是一行代码...一个简单的ImageBrush设置为具有实心填充的矩形的不透明蒙版。 (好吧......如果你还包括矩形,那么也是两个。)没有任何地方有大象。图像也很好。我已经在几个程序中打开它,并使用屏幕放大镜来确保我没有在Photoshop中使用任何东西。没关系。但是,WPF仍然在'加强'我的故意锯齿形象的边缘,但只有当用作画笔时。我没有看到任何可以在画笔上设置的与像素对齐相关的事物。 – MarqueIV 2011-04-07 09:54:53

回答

1

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

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

...和BAM!奇迹般有效! “排序”类似于“SnapsToDevicePixels”,但是用于定位元素(即,它围绕所有与布局相关的值,例如左,宽等等,而SnapsToDevicePixels在渲染时将布局捕捉到屏幕像素。)

M

2

我试图重现您的问题。只要是这样的:

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

mask.png包含一个简单的面膜对角线,如rectange的一半是可见的,另一半则是100%透明。 而recrangle渲染像素完美(和别名,如你所愿)。 我认为,你可能是一个DPI设置,这不是你的显示器原生的,而WPF只能正确渲染图像。

+0

这就是我们的确切代码,它为我们添加了“模糊”,但仅用作笔刷。这也是一个本地分辨率的LCD与适当的DPI,所以它不是那样。您的对角线是完美的对角线,只有黑色和透明像素的来源?你在输出中只有100%不透明和100%透明吗?同样,当我们直接使用图像时,我们可以得到完美的效果,但是当我们将它用作画笔时,我们就完美了。 – MarqueIV 2011-04-07 15:18:02

+0

我知道这已经很老了,但是我还有两年多的WPF知识,我想我误解了你的回答。 DPI问题可能与图形本身没有设置为96 DPI有关。 Photoshop默认为72,一些设计师忘记改变它。不过,不知道UseLayoutRounding如何解决这个问题,但如果没有别的办法,我会对此进行投票,以便其他人也可以将此视为可能的原因/原因。 – MarqueIV 2013-10-09 23:36:28