2008-12-17 6 views
17

Ich verstehe es nicht wirklich und es macht mich verrückt. Ich habe diese 4 Zeilen:MemoryStream.Read kopiert keine Bytes in den Puffer - C#

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); 

beim Debuggen i die Byte-Werte in IMAGE sehen können. Nach imageStream.Read überprüfe ich den Inhalt von contentBuffer und sehe nur 255 Werte. Ich kann nicht verstehen, warum passiert es? In diesen wenigen Zeilen gibt es nichts zu tun! wenn jemand mir helfen könnte, wäre es sehr geschätzt! danke, agnieszka

+4

4 Zeilen? Ich zähle 5 dort. –

Antwort

38

Versuchen Sie, imageStream.Position auf 0 zu setzen. Wenn Sie in den MemoryStream schreiben, verschiebt es die Position nach den Bytes, die Sie gerade geschrieben haben. Wenn Sie also versuchen zu lesen, gibt es dort nichts.

25

Sie müssen den Dateizeiger zurücksetzen.

imageStream.Seek(0, SeekOrigin.Begin); 

Ansonsten sind Sie aus dem Ende des Streams zu lesen.

12

Anzahl:

imageStream.Position = 0; 

Recht vor:

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

die 0 in der Lesebefehl für die von der aktuellen Position in der Speicherstrom-Offset steht, nicht der Beginn des Stroms. Nachdem der Stream geladen wurde, befindet sich die Position am Ende. Sie müssen es an den Anfang zurücksetzen.

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

Gerade

imageStream.ToArray() 

Es funktioniert verwenden und es einfacher.