TODOPIC
Lenguajes de programación para PC => C, C#, C++ => Mensaje iniciado por: arthas1888 en 09 de Julio de 2012, 13:57:53
-
buenos dias...
pasa lo siguiente necesito recibir una foto o imagen lo hago con la siguiente instruccion:
int bytes = serialPort1.BytesToRead;
byte[] buffer = new byte[bytes];
serialPort1.Read(buffer, 0, bytes);
foreach (byte elem in buffer)
{
recibido.Add(elem);
}
Bitmap imagen = null;
Byte[] bytes = (Byte[])(buffer);
MemoryStream ms = new MemoryStream(bytes);
imagen = new Bitmap(ms);
pictureBox1.Image = imagen;
return imagen;
el problema es q cuando recibo la foto solo recibo una parte de ella, y se pierde el resto de la imagen, creo que eso se debe a que los bytes que se leen de puerto serie se guardan en una variable tipo int de modo q me limita los bytes que se recepcionan, lo que quiero es acumular los bytes que se recepcionan con el fin de transformar esos bytes en bitmap y lograr conseguir la foto en su totalidad; como hago eso??
muchas gracias estare atento a cualquier respuesta por parte de uds!!
-
El problema es que creas tu matriz (buffer) con el tamaño de los datos recibidos hasta el momento de (int bytes = serialPort1.BytesToRead;), con esta ultima instrucción obtienes el numero de bytes almacenados hasta el momento en el buffer de entrada del puerto y lo que te está pasando es que después de esa instrucción ahun siguen llegando datos de la imagen que tu ya no recoges.
Soluciones varias:
Puedes, antes de enviar la imagen, enviar el tamaño de esta, creas una matriz del tamaño recibido (no uses int, usa algo mas grande como long) y después en un ciclo for ir almacenando los datos recibidos al bufer hasta llegar al tamaño recibido.
Si no quieres/puedes enviar el tamaño:
Viendo que haces uso de memorysteam puedes hacer uso desde el principio con el, algo asi:
MemoryStream ms = new MemoryStream();
while(serialPort1.BytesToRead >0)
{
ms.WriteByte(serialPort1.ReadByte());
}
Bitmap imagen = new Bitmap(ms);
pictureBox1.Image = imagen;
return imagen;
De esta última manera es raro pero podría llegar a pasar que el buffer llegara a 0 y se saliera del ciclo while sin haber llegado a terminarse de leer el archivo pero eso tiene facil solución, ya te lo dejo a ti si ves que te pasa.
Por otro lado hay mas y seguro que mejores soluciones, estas son las 2 primeras que se me han ocurrido asi pensandolo rapido.
Un saludo