2008-12-17 1057 views
17

Realmente no lo entiendo y me está volviendo loco. i tengo estas 4 líneas:MemoryStream.Read no copia bytes en el búfer - 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); 

al depurar puedo ver los valores de bytes en ImageStream. después de imageStream.Read, compruebo el contenido de contentBuffer y solo veo 255 valores. no puedo entender por qué está sucediendo? ¡no hay nada que hacer mal en estas pocas líneas! ¡si alguien pudiera ayudarme, sería muy apreciado! gracias, agnieszka

+4

4 líneas? Cuento 5 allí. –

Respuesta

38

Intenta configurar imageStream.Position en 0. Cuando escribes en el MemoryStream, mueves la posición después de los bytes que acabas de escribir, así que si tratas de leer no hay nada allí.

25

Debe restablecer el puntero del archivo.

imageStream.Seek(0, SeekOrigin.Begin); 

De lo contrario, está leyendo al final de la transmisión.

12

Añadir:

imageStream.Position = 0; 

justo antes:

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

el 0 en su instrucción de lectura representa el desplazamiento desde la posición actual en la secuencia de memoria, no el comienzo de la corriente. Después de que se haya cargado la secuencia, la posición está al final. Debe restablecerlo al principio.

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

sólo tiene que utilizar

imageStream.ToArray() 

Funciona y más fácil.

Cuestiones relacionadas