Cyr*_*ral 3 c# wpf xaml image-manipulation
如何在不牺牲性能的情况下在WPF(使用MVVM)中对图像进行着色/着色?纯粹的XAML解决方案将是理想的,因为修改代码中的位图将导致大量更改图像的性能损失.图像不仅仅是简单的形状,因此无法使用路径.
与WinForms/GDI +不同,WPF似乎不包含在渲染时对图像着色/着色的任何简单方法.实现此目的的两个想法是,使用着色器,或在图像上覆盖彩色矩形.
我决定尝试矩形路线,发现它有效.基本上,您需要做的就是在图像上叠加彩色矩形,并使用a OpacityMask将颜色填充限制在某个区域.OpacityMask主要用于路径,但它可以采用任何类型的画笔,包括ImageBrush.这意味着您可以将图像用作彩色填充的"模板".
示例:(从我的应用程序中,用户可以"突出显示"地图的一部分,实际图像看起来像这样)
在覆盖和面具之前

覆盖和面膜后

以下是所有必需的XAML:
<Image
Source="{Binding MyImage}"
Width="150"
Height="150" />
<Rectangle Width="150" Height="150">
<Rectangle.Fill>
<SolidColorBrush Color="{Binding Color}"/>
</Rectangle.Fill>
<Rectangle.OpacityMask>
<ImageBrush ImageSource="{Binding MyImage}"/>
</Rectangle.OpacityMask>
</Rectangle>
Run Code Online (Sandbox Code Playgroud)
要像我一样将颜色绑定到画笔,请使用ColorToBrushConverter.