मुझे BitmapImage
को MemoryStream
से MemoryStream
से वेब अनुरोध से प्राप्त पीएनजी और जीआईएफ बाइट्स से कुछ परेशानी हो रही है। बाइट्स को ठीक से डाउनलोड किया प्रतीत होता है और BitmapImage
ऑब्जेक्ट बिना किसी समस्या के बनाया गया है हालांकि छवि वास्तव में मेरे UI पर प्रतिपादन नहीं कर रही है। समस्या तब होती है जब डाउनलोड की गई छवि प्रकार पीएनजी या gif (जेपीईजी के लिए ठीक काम करता है) है।मेमोरीस्ट्रीम पीएनजी से जीपीएफ बिटमैप इमेज बनाना, 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;
}
कि वेब अनुरोध सही ढंग से बाइट्स मैं जिसके बाद डिस्क पर एक फ़ाइल में बाइट्स की बचत होती है की कोशिश की प्राप्त किया गया था परीक्षण करने के लिए और फिर एक का उपयोग कर छवि लोड 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;
}
किसी को भी चमक के किसी भी प्रकाश मिल गया?
'बिटमैप कैशऑप्शन.ऑनलोड 'चाल महत्वपूर्ण है। मैं बस यह जोड़ना चाहूंगा कि यह 'BeginInit() 'और' EndInit()' के बीच होना चाहिए। –
@ PieterMüller: बहुत उपयोगी सुराग; इसके अलावा, स्ट्रीम अभी भी * EndInit() 'को कॉल करते समय खुले रहना चाहिए क्योंकि एक और बाधा है जिसे आप ठोकर खा सकते हैं। –