2008-12-17 19 views
17

मुझे वास्तव में यह नहीं मिलता है और यह मुझे पागल कर रहा है। मैं इन 4 लाइनों है:मेमोरीस्ट्रीम। रीड बाइट्स को बफर में कॉपी नहीं करता है - सी #

Image img = Image.FromFile("F:\\Pulpit\\soa.bmp"); 
MemoryStream imageStream = new MemoryStream(); 
img.Save(imageStream, ImageFormat.Bmp); 
byte[] contentBuffer = new byte[imageStream.Length]; 
imageStream.Read(contentBuffer, 0, contentBuffer.Length); 

जब डिबगिंग मैं ImageStream में बाइट्स मान देख सकते हैं। imageStream के बाद। पढ़ें मैं सामग्री की सामग्री की जांच करें बफर और मैं केवल 255 मान देखता हूं। मुझे नहीं पता कि यह क्यों हो रहा है? इन कुछ पंक्तियों में गलत करने के लिए कुछ भी नहीं है! अगर कोई मेरी मदद कर सकता है तो इसकी सराहना की जाएगी! धन्यवाद, agnieszka

+4

4 लाइनें? मैं वहां 5 गिनती हूं। –

उत्तर

38

imageStream.Position को 0 पर सेट करने का प्रयास करें। जब आप मेमोरीस्ट्रीम को लिखते हैं तो यह बाइट्स के बाद स्थिति को ले जाता है जिसे आपने अभी लिखा है, इसलिए यदि आप पढ़ने की कोशिश करते हैं तो वहां कुछ भी नहीं है।

25

आपको फ़ाइल सूचक को रीसेट करने की आवश्यकता है।

imageStream.Seek(0, SeekOrigin.Begin); 

अन्यथा आप स्ट्रीम के अंत से पढ़ रहे हैं।

12

जोड़ें:

imageStream.Position = 0; 

सही से पहले:

imageStream.Read(contentBuffer, 0, contentBuffer.Length); 

अपने पढ़ने अनुदेश में 0 के लिए स्मृति धारा में वर्तमान स्थिति, नहीं धारा की शुरुआत से ऑफसेट खड़ा है। स्ट्रीम लोड होने के बाद, स्थिति अंत में है। आपको इसे शुरुआत में रीसेट करने की आवश्यकता है।

8
Image img = Image.FromFile("F:\\Pulpit\\soa.bmp"); 
MemoryStream imageStream = new MemoryStream(); 
img.Save(imageStream, ImageFormat.Bmp); 
byte[] contentBuffer = new byte[imageStream.Length]; 
imageStream.Position = 0;//Reset the position at the start 
imageStream.Read(contentBuffer, 0, contentBuffer.Length); 
5

बस

imageStream.ToArray() 

यह काम करता है और यह आसान का उपयोग करें।