我正在开发WPF应用程序。在那个iam中加载Listbox中的图像。有没有办法知道低分辨率的图像。我想用警告显示低分辨率图像。 Plz帮我解决了这个问题。 提前谢谢。
答案 0 :(得分:1)
假设您正在加载位图图像(包括BMP,JPEG,PNG等 - 任何不是矢量图像绘制的图像),您可以使用System.Windows.Media.Imaging中的BitmapSource类来读取源图像PixelHeight和PixelWidth。虽然您可以将图像直接加载到BitmapSource中,但如果要加载到Image控件中,则可以直接通过Image的Source属性访问BitmapSource。然后,它只是确定低分辨率对你意味着什么 - 小于50像素,100像素,200像素等,并在PixelHeight或PixelWidth小于此时显示警告。
将它们放在一起,假设我们想要在图像顶部显示橙色矩形,如果它小于100px宽或小于100px高。使用非列表框实现,我们可以这样做:
<Image x:Name="DemoImage" Source="demo.png"/>
<Rectangle Fill="Orange" Width="20" Height="20">
<Rectangle.Resources>
<local:LessThanConverter x:Key="LessThanConverter"/>
</Rectangle.Resources>
<Rectangle.Style>
<Style TargetType="Rectangle">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=DemoImage, Path=Source.PixelHeight,
Converter={StaticResource LessThanConverter}, ConverterParameter=100}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=DemoImage, Path=Source.PixelWidth,
Converter={StaticResource LessThanConverter}, ConverterParameter=100}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Rectangle.Style>
</Rectangle>
由于WPF仅触发检查相等,我们需要一个转换器来比较两个值 - 在这种情况下,我们的实际像素高度/宽度和我们确定的像素高度/宽度使图像'低分辨率' - 并返回我们可以触发的真/假值。在上面的代码中,它名为LessThanConverter。转换器的代码很简单:
/// <summary>
/// Converter to use in WPF triggers that returns true when
/// 'value' is less than 'parameter'.
/// </summary>
public class LessThanConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
return ((int)value < System.Convert.ToInt32(parameter));
}
public object ConvertBack(object value, Type targetType,
object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
然后,当加载图像时,矩形的样式检查其触发器以查看图像的高度或宽度是否小于100px;如果是这样,它会将矩形的可见性从默认(折叠)更改为可见,从而在图像顶部显示橙色矩形。当然,当图像分辨率较低时,您可以轻松地使用其他元素进行显示。
要在列表框中执行此操作,您只需更新项目模板即可同时包含源图像和警告图标;然后,根据与其关联的图像将样式应用于警告图标。您不能在此处使用ElementName绑定,但其他绑定类型之一应该足够。
或者,将下面的代码(使用ElementName绑定)包装到包含图像和警告图标的自定义控件中,您可以像项目模板中的普通图像控件一样使用它,除了您的自定义控件显示警告除图像外的图标(显示低分辨率图像时)。