2011-02-06 102 views
6

System.Drawing.Graphics類具有一個屬性CompositionMode,它具有兩個選項:SourceOver(它基於alpha組件,將任何已繪製的背景與已存在的背景混合)或SourceCopy,它只是用正在繪製的任何東西覆蓋背景。更改WPF中的Alpha混合模式?

在WPF中有類似的東西嗎?

在WPF中,當我在另一個頂部繪製PolyLine時,新的PolyLine總是與背景混合在一起。我認爲這與使用的容器無關。我正在使用Canvas,但無法在任何地方找到混合模式屬性。我想要做的是上面提到的SourceCopy組合模式。即新的PolyLine應該簡單地覆蓋Canvas上已有的內容。

有沒有一種簡單的方法來做到這一點,短的使用像素着色器(據我所知 - 無論如何不會工作,因爲我沒有訪問畫布backbuffer)。

我沒有被Canvas卡住,很樂意使用任何支持覆蓋模式的容器。

我目前有一個基於WriteableBitmap的解決方案,獲取System.Drawing.Graphics上下文,然後操作CompositionMode。它的工作原理,但由於我的窗口是全屏,解決方案有嚴重的性能影響。

說明和示例: WPF窗口完全透明,畫布(背景顏色(0,0,0,0))也是完全透明的。現在我用Color.FromArgb(128,128,0,0)繪製PolyLine。我現在有一個半透明的紅色折線。接下來,我使用Color.FromArgb(0,0,0,0)繪製相同的PolyLine。由於alpha混合發生,結果與之前一樣。然而,我想要的是紅色多段線被第二條多段線刪除(這正是圖形類中SourceCopy模式的作用。)

回答

0

我認爲你所需要做的就是確保刷子用於填充/描邊PolyLine具有完全不透明的alpha值(即255)。然後背景不應混合到它。

+1

是的,但我需要用任何alpha值覆蓋背景,甚至0。請參閱澄清和我剛剛添加到我的問題的例子。 – Harald 2011-02-06 06:00:26

0

您可以應用剪貼蒙版,這樣您可以提供剪輯元素的路徑低於它,但它可能很難維持很多元素需要修剪後...

+0

在我使用WritableBitmap的當前解決方案中,我應用剪裁矩形(通過AddDirtyRect)。 – Harald 2011-02-06 13:07:47