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

时间:2015-01-31 00:56:49

标签: c# wpf xaml image-manipulation

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

1 个答案:

答案 0 :(得分:6)

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

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

示例:(从我的应用程序中,用户可以“突出显示”地图的某个部分,实际图片看起来像this

Overlay& amp;面膜

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

After Overlay&面膜

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>

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