C# C语言中图像的重着色区域#

C# C语言中图像的重着色区域#,c#,wpf,winforms,image,C#,Wpf,Winforms,Image,我正在为我的汽车建造一个诊断读卡器。我可以解析来自OBD端口的消息,但我想创建一个比文本读出更好的显示。我希望我的汽车有一个图形显示,突出显示受影响的诊断区域。因此,如果轮胎气压低,我希望汽车图片上的轮胎变红。我想在C#中开发这个,因为这是我最熟悉的。有什么建议是最好的方法吗?如果该方法可以通过调整窗口大小来进行缩放,那也很好 <Image x:Name ="Bubble" Height="445" HorizontalAlignment="Left" Margin="42,12,0,0"

我正在为我的汽车建造一个诊断读卡器。我可以解析来自OBD端口的消息,但我想创建一个比文本读出更好的显示。我希望我的汽车有一个图形显示,突出显示受影响的诊断区域。因此,如果轮胎气压低,我希望汽车图片上的轮胎变红。我想在C#中开发这个,因为这是我最熟悉的。有什么建议是最好的方法吗?如果该方法可以通过调整窗口大小来进行缩放,那也很好

<Image x:Name ="Bubble" Height="445" HorizontalAlignment="Left" Margin="42,12,0,0" Stretch="Fill" VerticalAlignment="Top" Width="654" Source="/WpfApplication1;component/Images/bubble.png" Panel.ZIndex="0" Opacity="1"/>
<Image x:Name="Smiley" Height="445" HorizontalAlignment="Left" Margin="42,12,0,0" Stretch="Fill" VerticalAlignment="Top" Width="654" Source="/WpfApplication1;component/Images/bubble.png" Panel.ZIndex="1" Opacity="0"/>
<Button Content="Button" Height="35" HorizontalAlignment="Left" Margin="10,46,0,0" Name="button1" VerticalAlignment="Top" Width="24" Click="button1_Click" />
<Button Content="Button" Height="50" HorizontalAlignment="Left" Margin="14,118,0,0" Name="button2" VerticalAlignment="Top" Width="22" Click="button2_Click" />

一种方法是使用多个图像,并淡入不透明度。您只需要确保图像格式支持透明度(png-s做得很好)。假设你有一个汽车图像,前轮和后轮分别覆盖。使所有图像保持相同大小,以便于对齐

你会得到这样的结果

<Image x:Name="car" Source="car.png" Panel.ZIndex="0"/>
<Image x:Name="frontwheel" Source="frontwheel.png" Panel.ZIndex="1" Opacity="0"/>
<Image x:Name="rearwheel" Source="readwheel.png" Panel.ZIndex="2" Opacity="0"/>
编辑:这是我的一些代码中的一个片段。我在代码后面的画布中添加了图形

        <Grid Margin="20">
            <Image Name="image1" Width="640" Height="640"  
                   Opacity="{Binding Path=Value, ElementName=OpSlider}"
                   HorizontalAlignment="Center" 
                   />
            <Canvas Name="MarkerLayer" 
                   Opacity="{Binding Path=Value, ElementName=DotOverlaySlider}"
                   />
            <Canvas x:Name="Squares"
                    Opacity="{Binding Path=Value, ElementName=OverlayOpSlider}"
                    />
        </Grid>

此处的不透明度绑定到滑块

            <Slider x:Name="OpSlider"  Width="150" SmallChange="0.05" Maximum="1" Value="0.5" />
            <Slider x:Name="OverlayOpSlider" Width="150" SmallChange="0.05" Maximum="1" Value="1" />
            <Slider x:Name="DotOverlaySlider" Width="150" SmallChange="0.05" Maximum="1" Value="0.8" />

一种方法是使用多个图像,并减弱不透明度。您只需要确保图像格式支持透明度(png-s做得很好)。假设你有一个汽车图像,前轮和后轮分别覆盖。使所有图像保持相同大小,以便于对齐

你会得到这样的结果

<Image x:Name="car" Source="car.png" Panel.ZIndex="0"/>
<Image x:Name="frontwheel" Source="frontwheel.png" Panel.ZIndex="1" Opacity="0"/>
<Image x:Name="rearwheel" Source="readwheel.png" Panel.ZIndex="2" Opacity="0"/>
编辑:这是我的一些代码中的一个片段。我在代码后面的画布中添加了图形

        <Grid Margin="20">
            <Image Name="image1" Width="640" Height="640"  
                   Opacity="{Binding Path=Value, ElementName=OpSlider}"
                   HorizontalAlignment="Center" 
                   />
            <Canvas Name="MarkerLayer" 
                   Opacity="{Binding Path=Value, ElementName=DotOverlaySlider}"
                   />
            <Canvas x:Name="Squares"
                    Opacity="{Binding Path=Value, ElementName=OverlayOpSlider}"
                    />
        </Grid>

此处的不透明度绑定到滑块

            <Slider x:Name="OpSlider"  Width="150" SmallChange="0.05" Maximum="1" Value="0.5" />
            <Slider x:Name="OverlayOpSlider" Width="150" SmallChange="0.05" Maximum="1" Value="1" />
            <Slider x:Name="DotOverlaySlider" Width="150" SmallChange="0.05" Maximum="1" Value="0.8" />


或者更好,只需将所有元素的不透明度保留为1,然后使用过滤器更改受影响部分图像的红色色调的不透明度。使用像@Nzc建议的单独图像是解决这个问题的最简单的方法。我用两个示例图像尝试了这个方法,但似乎不起作用。我添加了两个图像(PNG),然后将它们的不透明度设置为1和0,然后在一个按钮中以相反的方式设置不透明度。但是图像没有改变,我觉得还可以。没有必要在较低的层上设置不透明度=0,但我想这也没有什么坏处。图像放置在什么容器中?或者更好,只需将所有元素的不透明度保持为1,并使用过滤器更改受影响部分图像的红色色调的不透明度。使用像@Nzc建议的单独图像是解决这个问题的最简单的方法。我用两个示例图像尝试了这个方法,但似乎不起作用。我添加了两个图像(PNG),然后将它们的不透明度设置为1和0,然后在一个按钮中以相反的方式设置不透明度。但是图像没有改变,我觉得还可以。没有必要在较低的层上设置不透明度=0,但我想这也没有什么坏处。图像放在什么容器中?