XAML 在WPF中为部分透明的图像着色

ua4mk5z4  于 2023-06-27  发布在  其他
关注(0)|答案(1)|浏览(116)

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

qvsjd97n

qvsjd97n1#

与WinForms/GDI+不同,WPF似乎不包含任何简单的方法来着色/着色图像,因为它正在呈现。实现这一点的两个想法是,使用着色器,或在图像上覆盖一个彩色矩形。
我决定尝试矩形路线,发现它的工作。基本上,您需要做的就是在图像上覆盖一个彩色矩形,并使用OpacityMask将颜色填充限制在特定区域。OpacityMask主要用于路径,但它可以采用任何类型的画笔,包括ImageBrush。这意味着您可以使用您的图像作为“模具”的彩色填充。

示例:(取自我的应用程序,其中用户可以“突出显示”Map的一部分,实际图像看起来像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>

要像我一样将颜色绑定到画笔,请使用ColorToBrushConverter

相关问题