我有一些麻煩,從一個Web請求獲得PNG和GIF字節創建從一個MemoryStream
創建BitmapImage
WPF BitmapImage的。字節似乎要下載罰款和BitmapImage
對象沒有問題,但是產生的圖像是不實際的渲染我的UI。只有當下載的圖像類型爲png或gif(適用於jpeg)時纔會出現問題。從MemoryStream的PNG,GIF
這裏是代碼演示了此問題:
var webResponse = webRequest.GetResponse();
var stream = webResponse.GetResponseStream();
if (stream.CanRead)
{
Byte[] buffer = new Byte[webResponse.ContentLength];
stream.Read(buffer, 0, buffer.Length);
var byteStream = new System.IO.MemoryStream(buffer);
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.DecodePixelWidth = 30;
bi.StreamSource = byteStream;
bi.EndInit();
byteStream.Close();
stream.Close();
return bi;
}
要測試web請求被正確地獲得我試圖節省了字節磁盤上的文件下面的字節,然後使用加載圖像UriSource
,而不是StreamSource
,它適用於所有的圖像類型:
var webResponse = webRequest.GetResponse();
var stream = webResponse.GetResponseStream();
if (stream.CanRead)
{
Byte[] buffer = new Byte[webResponse.ContentLength];
stream.Read(buffer, 0, buffer.Length);
string fName = "c:\\" + ((Uri)value).Segments.Last();
System.IO.File.WriteAllBytes(fName, buffer);
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.DecodePixelWidth = 30;
bi.UriSource = new Uri(fName);
bi.EndInit();
stream.Close();
return bi;
}
任何人有任何光照耀?
的'BitmapCacheOption.OnLoad'技巧是很重要的。我只想補充說它應該在'BeginInit()'和'EndInit()'之間。 – 2012-01-06 09:48:44
@PieterMüller:非常有幫助的線索;另外,當調用'EndInit()'作爲另一個可能會偶然發現的約束時,流仍然*必須*打開。 – 2012-09-02 19:24:57