gpt4 book ai didi

WPF:处理图像

转载 作者:行者123 更新时间:2023-12-02 17:38:12 25 4
gpt4 key购买 nike

我想创建以下功能:我希望能够在窗口上显示图像(如果提供)或线性渐变画笔(如果图像不存在)。我想出了两种方法:

  1. 创建 Border 并将 ImageBrush 应用于边框 Background 属性(如果)提供了图像Uri,如果没有提供LinearGradientBrush。这很容易实现: View 模型将通过图像提供边框背景属性画笔或线性渐变画笔。但有一个大问题:如果图像尺寸不适合边框尺寸,图像变形,这是我希望避免的。是有一种方法可以设置 ImageBrush 并保留图像尺寸比率,即应用类似 Stretch = Stretch.Uniform 的内容?

  2. 创建一个Border和一个Image在其中。然后,创建数据触发器边框,如果图像 Uri( View 模型中的属性)为 null,则设置边框的 BackgroundLinearGradientBrush 并将其留空,如果否则。我尝试创建这个,但数据触发器从未理解 null案件。 Image 也存在问题,因为如果提供了 nullImageSource 属性,抛出异常。代码如下所示:

    <Border Width="130" Height="170">
    <Border.Style>
    <Style TargetType="Border">
    <Style.Triggers>
    <DataTrigger Binding="{Binding Image}" Value="{x:Null}">
    <Setter Property="Background">
    <Setter.Value>
    <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
    <GradientStop Color="#696969" Offset="0.0" />
    <GradientStop Color="#2E2E2E" Offset="1.0" />
    </LinearGradientBrush>
    </Setter.Value>
    </Setter>
    </DataTrigger>
    </Style.Triggers>
    </Style>
    </Border.Style>
    <Image Name="image" Stretch="Uniform">
    <Image.Source>
    <BitmapImage
    DecodePixelWidth="{Binding ElementName=image, Path=Width}"
    UriSource="{Binding Path=Image}" />
    </Image.Source>
    </Image>
    </Border>

实现此类功能的最佳和最简单的方法是什么?谢谢。

最佳答案

ImageBrush 派生自 TileBrush 类,该类具有 Stretch 属性。因此,您不能使用诸如 Stretch = Stretch.Uniform 之类的东西,而只能使用这样的东西。

关于WPF:处理图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5776846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com