【问题标题】:How to programatically change image color?如何以编程方式更改图像颜色?
【发布时间】:2023-03-31 09:03:01
【问题描述】:

我有一个每次用户执行操作时都会触发的方法,在这个方法中,我想在每次调用该方法时触发图像的颜色来改变颜色/照亮。

有没有一种简单的方法来以编程方式更改图像的颜色?我看不到任何明显的方法或属性可以附加到图像上。

所以下面的方法如下,只是不知道如何设置BoxBagImage的图像颜色

void matcher_GestureMatch(Gesture gesture)
{
     lblGestureMatch.Content = gesture.Name;
     scoreCntr++;

     boxBagImage.    // <-- don't see any color or background property belonging to the image
     lblScoreCntr.Content = scoreCntr;            
}

【问题讨论】:

    标签: c# wpf image background-color


    【解决方案1】:

    设置它会做什么? WPF 应该如何猜测您想到的“背景”?有几件事可以称为“背景”。另外,WPF 将如何猜测您认为背景的面积有多大?

    让我们从 Image 在其整个区域显示位图(或类似)的事实开始,因此直接 Foreground 或 Background 在这里毫无意义。它们会立即被位图透支。它不像 TextBox 或 Canvas。

    这可能就是为什么 Image 没有这样的属性。

    --

    如果您的位图本身有一个“背景”(即在蓝天上绘制一棵树,sky=background),那么它仍然是位图的内容。 WPF 不是图像编辑程序,不会轻易为您更改它。如果要更改图像的“背景”,可以加载位图,修改其像素,并将修改后的位图加载到 Image 控件中。或者在渲染阶段应用一些智能滤镜(所谓的“效果”)。

    或者,如果您的位图是透明的(例如,带有 alpha 通道的 PNG,完全 alpha 化透明像素上的树),并且您希望通过“透明间隙”看到“某些背景”,那么您必须设置不是图像本身的背景,而是图像所在的组件。所以,如果你有例如:

    <Grid>   <Image Source=.... />   </Grid>
    

    然后在Grid 上应用Background。放置在蓝色网格上的透明图像看起来就像在蓝色背景上,就像在放置在蓝色桌子上的玻璃上绘图一样。事实上,这里的网格只是形成了背景。您可以通过这种方式获得任何布局或效果。如果你不想让整个网格都变成那种颜色,你可以注入另一个网格:

    <Grid>
        <Grid Background="Blue" Margins="30,30,30,30"> <Image Source=.... /> </Grid>
    </Grid>
    

    或任何你喜欢的。

    或者,如果您的意思是当 Image 以这种方式设置其 Stretch 属性时显示的 Image 控件的“背景”,位图不会填满整个区域(Stretch=Uniform 喜欢要做到这一点,除非你仔细设置宽度/高度)——然后简单地看上面。 “区域”只是透明的,所以只需为 Image 下面的组件添加一些颜色即可。

    【讨论】:

      猜你喜欢
      • 2011-01-16
      • 1970-01-01
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多