2014-09-20 92 views
1

如果實際圖像的尺寸大於控件的屬性,則圖像失真。例如:圖片是800×600,控制只有200×200wpf應用程序中的圖像控制無法正常顯示圖像

System.Windows.Controls.Image im = new System.Windows.Controls.Image(); 
im.Stretch = Stretch.None ; 
im.Width = 200; 
im.Height = 200; 
im.Margin = new Thickness(5, 5, 5, 5); 
im.Source = loadImageFromArray(m_imgs[f]); 

private BitmapSource loadImageFromArray(Byte[] imageData) 
{ 
    using (MemoryStream ms = new MemoryStream(imageData)) 
    { 
     var decoder = BitmapDecoder.Create(ms, 
      BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnDemand); 
     return decoder.Frames[0]; 
    } 
} 

試圖與Image.Stretch玩,但沒有它的價值並沒有給予適當的顯示。我想控制調整圖像的大小,而不是裁剪並顯示它。圖像採用jpeg格式。

VS2013,WPF,netfw 4.0。

UPD:對不起,但我找到了答案。問題包含在BitmapCacheOptions中。隨着BitmapCacheOption.OnLoad所有的偉大作品。不知道爲什麼OnDemand只適用於小圖片才能正常工作。將帖子作爲答案。

+3

請參閱備註一節[此處](http://msdn.microsoft.com/zh-cn/library/ms615998.aspx),以解釋爲什麼從流中加載BitmapFrame時必須使用'OnLoad'將在裝載後立即關閉。 – Clemens 2014-09-20 16:00:59

回答

1

問題出在緩存選項。正如Clemens指出的,如果您希望在位圖創建後關閉bitmapStream,我們需要選擇OnLoad緩存選項。

0

當您設置Uniform內容被調整大小以適合目標尺寸,同時保留其原始縱橫比。

System.Windows.Controls.Image im = new System.Windows.Controls.Image(); 
    im.Stretch = Stretch.Uniform; 
    im.MaxHeight = 200; 
    im.MaxWidth = 200;