gpt4 book ai didi

wpf - ImageSource 上的转换器 - 将图像转换为灰度

转载 作者:行者123 更新时间:2023-12-04 22:36:54 27 4
gpt4 key购买 nike

我在图像控件上有多重绑定(bind)。我绑定(bind)了两个属性,一个是 bool 类型(IsLogged),一个是 typeof Uri(ProfilePhoto)。

XAML:

                                <Image.Source >
<MultiBinding Converter="{StaticResource avatarConverter}">
<Binding Path="ProfilePhoto"></Binding>
<Binding Path="StatusInfo.IsLogged"></Binding>
</MultiBinding>
</Image.Source>
</Image>

我创建转换器,如果属性 IsLogged 为 false,它将 BitmapImage 转换为灰度。

它看起来像这样:
public class AvatarConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
var image = values[0] as BitmapImage;

string s = values[1].ToString();

bool isLogged = System.Convert.ToBoolean(s);

if (!isLogged)
{
try
{
if (image != null)
{
var grayBitmapSource = new FormatConvertedBitmap();
grayBitmapSource.BeginInit();
grayBitmapSource.Source = image;
grayBitmapSource.DestinationFormat = PixelFormats.Gray32Float;
grayBitmapSource.EndInit();
return grayBitmapSource;
}
return null;

}
catch (Exception ex)
{
throw ex;
}
}
return image;
}

public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}

如果我只绑定(bind) BitmapImage 的图像源属性类型,它会很好用,但我需要绑定(bind) Uri 的属性类型。

我害怕在转换器中创建变量 BitmapImage 并作为源使用 Uri。
将此变量作为图像源返回。我认为这不是理想的方式。也许我错了。

你有什么意见

一些优雅的解决方案?

最佳答案

尽管您可以使用转换器来实现,但还有一个更好的选择:使用着色器效果。您将在 this page 上找到 GreyscaleEffect 的实现。 .

<Style x:Key="grayedIfNotLogged" TargetType="Image">
<Style.Triggers>
<DataTrigger Binding="{Binding StatusInfo.IsLogged}" Value="False">
<Setter Property="Effect">
<Setter.Value>
<fx:GrayscaleEffect />
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>

...

<Image Source="..." Style="{StaticResource grayedIfNotLogged}" />

关于wpf - ImageSource 上的转换器 - 将图像转换为灰度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4708241/

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