Uso del PictureBox en Visual Basic 2010

Hola gente, he estado buscando por la web, pero no he podido encontrar exactamente lo que quiero. He desarrollado una placa que adquiere datos (imagenes) de 900 pixeles de un sensor optico, el cual lo envio por USB mediante una aplicacion CDC, lo cual genera un puerto virtual COM en la PC. Para la interfase de comunicacion estoy utilizando Visual Basic 2010, ya he logrado la parte de la conexion del puerto COM, pero ahora es donde viene lo que no se como hacer. Tengo que representar esos 900 bytes en una matriz de 30x30 como una imagen en pixeles, preferentemente en escala de grises.
En visual basic V6.0 habia una manera de hacerlo que era PictureBox1.Pset(x,y), pero en 2010 ya no es mas asi, y la verdad es que estoy algo perdido con esto. Si alguien ha tenido que hacer algo similar o sabe puntualmente como realizar dicha matriz de pixeles, pues se lo agradeceria mucho. les adjunto mi proyecto para que puedan ver lo que he hecho hasta ahora, desde ya muchas gracias.
 

Adjuntos

  • Visual Studio 2010.rar
    222.8 KB · Visitas: 15
Hola.
Debes de crear un objeto Bitmap, y dibujar bit a bit con el mètodo SetPixel().
Al terminar de dibujar bit a bit, lo envias al PictureBox como imagen.

Si necesitas dibujar algo manualmente, crea un objeto Graphics. con las propiedades del Bitmap y trazas lo que sea con las libreria de GDI+.
Saludos.
 
Gracias ByAxel por responder. Si no fuera mucho pedir, podrias detallarme un poco como seria el codigo.
Por otro lado, como le indico que los bytes que leo quiero que los ponga como escala de grises y no como color RGB? Desde ya muchas gracias. Saludos
 
Bueno generalmente trabajo en C# pero no es difícil de comprender.

Creas un objeto Bitmap con el tamaño de la matriz que tienes (30x30) es algo pequeño, no? :)

using System.Drawing;
Bitmap bmp = new Bitmap(30,30);

// Dentro del un for que recorra la matriz.
bmp.SetPixel(X, Y, Color.Gray); // Color.FromArgb(0,0,0); puedes spesonalizar el color, tonalidades.

pictureBox.Image = bmp;

Saludos.
 
Nuevamente gracis por responder, gracias a tu ayuda pude realizar lo que queria en parte, ya pude crear el objeto Bitmap, pero no exactamente como me lo indicaste ya que me saltaban ciertos errores, lo resolvi de la siguiente manera, primero declare una variable como Dim imagen As Bitmap (30,30) y luego hice Picturebox.Image = Imagen.SetPixel(i,j, Color.FormArgb(i+j,i+j,i+j)) dentro de un bucle por y me grafico la imagen dentro del picturebox.
Ahora tengo otras inquietudes. Hay alguna manera de modificar el tamaño de asignacion del pixel, como un factor de escala o zoom? Porque si bien es una imagen chica, necesito que se vea mas grande, aunque implique un cierto pixelado, eso no importa. Por otro lado, creo que no me cirve del todo el Color.FormArgb, porque es para ingresar con 3 valores interos y yo poseo solo 1 para escala de grises, seria logico pensar que debiera haber una intruccion para estos casos no?
Y la ultima inquietud es, yo mando los 900 byte por el puerto COM, pero en el programa declare una variable Datos como String, es posible leer la rafaga de bytes pero que funcione como Integer, porque al momento de queres usar los datos en la funcion Color.FormArgb me dice que el dato no puede ser Char, entonces lo que hice fue convertirlos a intero mediante la funcion DatosInteger = Cint(val(Datos(i+j)) y me salto error de que me excedi en el valor de la matriz, que paso? si en teoria nunca superaria el valor 60 y posee 900 valores Datos, en el bucle lo use luego asi Picturebox.Image = Imagen(i,j, Color.FormArgb(i+j,i+j,DatoInteger)). Será que estoy leyendo mal los datos, utilizo la intruccion Datos = PuertoSerie.ReadExisting(). Bueno espero no haberte preguntado demaciado. Desde ya muchas gracia por todo.
 
Para el metodo FormArgb(), indica que es un còdigo RGB (rojo, verde y azul), como ves son bàsicos para hacer mezclas de colores y soportan valores del 0 al 255; Argb, indica que tambien soportan niveles de transparencia. Para grises solo basta que los tres valores sean los mismos.

Para el caso de tipos distintos puedes usar; en mi caso C# por ejemplo VariableInt = (int)ValorChar; o Convert.ToInt(ValorChar). Busca similares.

Para el caso del tamaño hay varias formas que se me ocurren, por ejemplo.
1: Hago que el bitmap sea proporcionalmente mas grande que la matriz (60, 60), ya es el doble y al momento de pintar, pinto 2x2 pixeles con un mismo dato de la màtriz.
2: Se puede cambiar el formato del pixel de varias formas, como cambiar la representaciòn del tamaño (pixel, inch, display, etc).
3: GDI+

Resiva la ayuda el lìnea MSDN en español.

Saludos.
 
Atrás
Arriba