2009-05-26 57 views
0

我正在开发WPF应用程序。在那个iam中,在Listbox中加载图像。有什么方法可以知道分辨率低的图像吗?我想显示带有警告的低分辨率图像。 Plz帮助我了解这个查询。 在此先感谢。如何知道WPF应用程序中的图像信息

回答

1

假设您要加载位图图像(包括BMP,JPEG,PNG等 - 任何不是矢量图形图的图像),您可以使用System.Windows.Media.Imaging中的BitmapSource类来读取源代码图像的PixelHeight和PixelWidth。虽然可以直接将图像加载到BitmapSource中,但如果要加载到Image控件中,则可以通过图像的Source属性直接访问BitmapSource。然后,只需确定低分辨率对您来说意味着什么 - 小于50像素的平方,100像素,200像素等,并在PixelHeight或PixelWidth小于此像素时显示警告。

把它放在一起,假设我们想在图像顶部显示一个橙色矩形,如果它小于100像素宽或小于100像素高。使用非列表框的实现,我们可以这样做:

<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(); 
    } 
} 

然后,当被加载的图像时,矩形的样式检查其触发,查看是否具有图像的高度或宽度小于100像素;如果是这样,它会将矩形的可见性从默认(折叠)更改为可见,从而在图像顶部显示橙色矩形。当然,当图像分辨率较低时,您可以轻松使用不同的元素进行显示。

要在列表框中执行此操作,您只需更新项目模板以包含源图像和警告图标;然后根据与其关联的图像将样式应用于警告图标。你不能在这里使用ElementName绑定,但其他的绑定类型应该就足够了。或者,将下面的代码(使用ElementName绑定)包装到包含图像和警告图标的自定义控件中,以及您可以像项目模板中的普通图像控件一样使用该控件,不同之处在于您的自定义控件显示警告图标(当显示低分辨率图像时)。

+0

Thanks for the Reply – ibrahimkhan 2009-05-26 13:43:18

相关问题