2009-05-26 58 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

相關問題