2011-09-28 104 views
0

我從服務器獲取幾個圖標文件(92X92)。我需要解析它們並將它們存儲在字典中,然後在UI上顯示它們。我使用下面的代碼獲取文件名和其他行動:從服務器顯示以字節格式獲得的圖像的問題

System.Windows.Media.Imaging.BitmapImage icon = null; 
using (AutoResetEvent are = new AutoResetEvent(false)) 
{ 
    System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() => 
    { 
     MemoryStream byteStream = new MemoryStream(resp); 
     byteStream.Write(resp, 0, resp.Length); 
     icon = new BitmapImage(); 
     icon.SetSource(byteStream); 
     Console.WriteLine(icon.PixelHeight + ":" + icon.PixelWidth); 

     string[] iconname = entry.Name.Split(new char[] { '-' }); 
     string newimagename = iconname[1]; 

     are.Set(); 
     string[] newname = entry.Name.Split(new char[] { '-', '.' }); 
     iconDict.Add(newimagename, icon); 
    }); 
    are.WaitOne(); 
    //string[] newname = entry.Name.Split(new char[] { '-', '.' }); 
    //string newFileName = newname[1]; 
    //iconDict.Add(newFileName, icon); 
} 

現在我的問題是,我不能夠獲得開放的,我不甚至得到圖標(但是當我把斷點ñ chk的高度和寬度都是92X92);當我嘗試顯示它時,我最終顯示空白而不是圖像。我將這些圖像與我收到的名稱一起綁定到一個列表框。名稱顯示沒有任何問題。

+0

見http://stackoverflow.com/questions/2097152/creating-wpf-bitmapimage-from-memorystream-png-gif,我認爲它具有相同的問題 – tazyDevel

+0

這沒有幫助的交易,這個問題似乎相似但我不知道它是不是幫助我.. – Apoorva

+0

什麼格式的圖像來過? ICO? BMP?其他? – ctacke

回答

0

我做的改變是;

using (AutoResetEvent are = new AutoResetEvent(false)) 
{ 
    System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() => 
    { 
    MemoryStream byteStream = new MemoryStream(resp); 
    byteStream.Write(resp, 0, resp.Length); 
    string[] iconname = entry.Name.Split(new char[] { '-' }); 
    string newimagename = iconname[1]; 

    Uri icon_url = new Uri(newimagename, UriKind.RelativeOrAbsolute); 
    icon = new BitmapImage(icon_url); 
    imag = new Image(); 
    imag.Source = icon; 
    sourceofImage = icon.UriSource.ToString(); 
    icon.SetSource(byteStream); 
    Console.WriteLine(icon.PixelHeight + ":" + icon.PixelWidth); 
    are.Set(); 
    // string[] newname = entry.Name.Split(new char[] { '-', '.' }); 
    // iconDict.Add(sourceofImage, icon); 
    }); 
    are.WaitOne(); 
    string[] newname = entry.Name.Split(new char[] { '-', '.' }); 
    string newFileName = newname[1]; 
    iconDict.Add(newFileName, icon); 
    }