【问题标题】:Tint a partially transparent image in WPF在 WPF 中为部分透明的图像着色
【发布时间】:2015-02-01 23:15:29
【问题描述】:

如何在 WPF(使用 MVVM)中对图像进行着色/着色而不牺牲性能?一个纯粹的 XAML 解决方案将是理想的,因为在代码中修改位图会导致性能损失,因为图像会发生很多变化。图像不仅由简单的形状组成,因此无法使用路径。

【问题讨论】:

    标签: c# wpf xaml image-manipulation


    【解决方案1】:

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

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

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

    【讨论】:

    • 您可以通过在 XAML 中创建 SolidColorBrush 实例并绑定其 Color 属性(如 &lt;Rectangle.Fill&gt;&lt;SolidColorBrush Color="{Binding Color}"/&gt;&lt;/Rectangle.Fill&gt;)来保存 ColorToBrushConverter。
    猜你喜欢
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 2011-03-04
    相关资源
    最近更新 更多