在 WPF 中对部分透明图像进行着色

2023-11-26

如何在不牺牲性能的情况下对 WPF 中的图像进行着色(使用 MVVM)?纯粹的 XAML 解决方案将是理想的,因为修改代码中的位图会导致性能损失以及大量更改的图像。该图像不仅仅是由简单的形状组成,因此不可能使用路径。


与 WinForms/GDI+ 不同,WPF 似乎不包含任何在渲染图像时对图像进行着色/着色的简单方法。实现此目的的两个想法是使用着色器或在图像上覆盖彩色矩形。

我决定尝试一下矩形路线,发现它有效。基本上,您需要做的就是在图像上覆盖一个彩色矩形,然后使用OpacityMask将颜色填充限制在特定区域。 OpacityMask 主要与路径一起使用,但它可以采用任何类型的画笔,包括ImageBrush。这意味着您可以使用图像作为彩色填充的“模板”。

Example:(取自我的应用程序,用户可以“突出显示”地图的一部分,实际图像看起来像this)

叠加和蒙版之前

https://i.stack.imgur.com/7LGzI.png

叠加和蒙版后

http://i.imgur.com/WkJdmvG.png

以下是为此所需的所有 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(使用前将#替换为@)

在 WPF 中对部分透明图像进行着色 的相关文章

随机推荐