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