是否可以(以及如何)調整用於在桌面上顯示WPF窗體的混合模式?將WPF窗口與桌面混合
我有一個窗口作爲整個屏幕的覆蓋。這裏的XAML:
<Window x:Class="RedGreenBarsWPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Red/Green Overlay" Topmost="True" Height="300" Width="525" AllowsTransparency="True" WindowStyle="None" Background="Transparent" WindowStartupLocation="Manual" IsHitTestVisible="False">
<Canvas Name="canvas" />
</Window>
它不能被點擊,並且它得到調整並移動到覆蓋整個屏幕窗口加載時。然後我畫一些形狀像這樣在畫布上:
System.Windows.Media.Brush red = new SolidColorBrush(System.Windows.Media.Color.FromArgb(200, 255, 0, 0));
System.Windows.Size s = new System.Windows.Size(System.Windows.SystemParameters.PrimaryScreenWidth, System.Windows.SystemParameters.PrimaryScreenHeight);
int lines = 20;
for (double i = 0; i < s.Width; i += s.Width/lines)
{
System.Windows.Shapes.Rectangle rect = new System.Windows.Shapes.Rectangle
{
Width = s.Width/lines,
Height = s.Height
};
rect.Fill = red;
Canvas.SetTop(rect, 0);
Canvas.SetLeft(rect, i * 2);
canvas.Children.Add(rect);
}
這也正是它應該,但不是我想要的。下面是在Photoshop中進行可視化(我貌似「正常」):
我需要找出一種方法來使它看起來像右側,那裏的文本不點亮的紅色方塊由重疊的顏色。我已經搜索了高和低,雖然有庫可以完成這與窗口內的元素,我需要混合模式擴展到整個桌面。如何才能做到這一點?
什麼是你的合併覆蓋和底層圖像的算法?左側的圖像具有一定透明度的紅色部分,黑色和紅色合併在一起,爲您提供「輕鬆」的外觀。右邊的模擬似乎用紅色代替全白色,但是單獨留下黑色。這對二進制黑白圖像工作正常,但是當文本不是黑色或背景不是白色時會發生什麼? –
我試圖用這個自己做實驗......我的想法是爲了做這樣的事情,你必須得到每個矩形中的像素數據,並且如果數據不完全是R = 200(或者其他您指定的紅色值),則可以使該像素完全透明。所以紅色會在完全白色的背景上顯示爲紅色,但會使其他所有內容流血。然而,似乎沒有使用WPF做這件事的好方法(至少我還沒有得到它的權利..) – ryrich
@JohnKoerner我沒有使用任何種類的特定算法來繪製矩形,我只是添加它直接到畫布。文本出現在它後面,因爲alpha值設置爲只有200(255是完全不透明的)。 – Scott