如何在不牺牲性能的情况下对 WPF 中的图像进行着色(使用 MVVM)?纯粹的 XAML 解决方案将是理想的,因为修改代码中的位图会导致性能损失以及大量更改的图像。该图像不仅仅是由简单的形状组成,因此不可能使用路径。
与 WinForms/GDI+ 不同,WPF 似乎不包含任何在渲染图像时对图像进行着色/着色的简单方法。实现此目的的两个想法是使用着色器或在图像上覆盖彩色矩形。
我决定尝试一下矩形路线,发现它有效。基本上,您需要做的就是在图像上覆盖一个彩色矩形,然后使用OpacityMask将颜色填充限制在特定区域。 OpacityMask 主要与路径一起使用,但它可以采用任何类型的画笔,包括ImageBrush
。这意味着您可以使用图像作为彩色填充的“模板”。
Example:(取自我的应用程序,用户可以“突出显示”地图的一部分,实际图像看起来像this)
叠加和蒙版之前
叠加和蒙版后
以下是为此所需的所有 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>
要像我一样将颜色绑定到画笔,请使用颜色到画笔转换器.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)