SoloCodigo

Programación General => C/C++ => Visual C++ => Mensaje iniciado por: diego.martinez en Miércoles 29 de Agosto de 2007, 10:22

Título: Volcado De Imagen Rgb A Pantalla Win32
Publicado por: diego.martinez en Miércoles 29 de Agosto de 2007, 10:22
Buenas:

Tengo una imagen descompresa en formato RGB en un array de datos.
Querria hacer que aparezca en pantalla, a ser posible con stretch.

He probado con StretchDIBits y SetDIBitsToDevice y no he conseguido que se vea, sin embargo los datos de la imagen estan bien, ya que punto a punto se visualiza correctamente.

Código: Text
  1.  
  2.   BITMAPINFO bmi;
  3.     memset(&bmi, 0, sizeof(bmi));
  4.     bmi.bmiHeader.biSize        = sizeof(BITMAPINFOHEADER);
  5.     bmi.bmiHeader.biWidth       = jpeg.width;
  6.     bmi.bmiHeader.biHeight      = jpeg.height;
  7.     bmi.bmiHeader.biPlanes      = 1;
  8.     bmi.bmiHeader.biBitCount    = 0;
  9.     bmi.bmiHeader.biCompression = BI_RGB;
  10.   bmi.bmiHeader.biSizeImage   = 0;
  11.  
  12.     int iRet = StretchDIBits(dc,
  13.                          0, 0, jpeg.width, jpeg.height,
  14.                          0, 0, jpeg.width, jpeg.height,
  15.        jpeg.data,
  16.                          &bmi,
  17.                          DIB_RGB_COLORS,
  18.                          SRCCOPY);
  19.  
  20.  

Estoy haciendo algo mal? por que esta sacado de msdn y no se si estoy llenando la estructura correctamente o que
Título: Re: Volcado De Imagen Rgb A Pantalla Win32
Publicado por: daltomi en Jueves 30 de Agosto de 2007, 22:06
Hola.
biSizeImage no deberia ser 0. Una fórmula que yo utilizo es:
tamaño = ((bits + 7)/8) * ancho * alto;
Recomiendo que busques una mejor, por que me a dado problemas para mapas de 24 bits.
biBitCount no debe ser 0. Debes especificar el valor que corresponda a la imagen: 8, 16 o 24 bits. En cambio biCompression debe ser 0(generalmente).

¿Qué tipo de datos es jpg.data,es un puntero a void?

De todas maneras, te recomiendo este sitio: www.codeproject.com/bitmap/ (http://www.codeproject.com/bitmap/)

Saludos.
Título: Re: Volcado De Imagen Rgb A Pantalla Win32
Publicado por: diego.martinez en Lunes 10 de Septiembre de 2007, 17:03
muchas gracias, ya he podido arreglarlo.  :lol:
Título: Re: Volcado De Imagen Rgb A Pantalla Win32
Publicado por: Amilius en Lunes 10 de Septiembre de 2007, 17:18
Cita de: "daltomi"
tamaño = ((bits + 7)/8) * ancho * alto;
Recomiendo que busques una mejor, por que me a dado problemas para mapas de 24 bits.
Hola,

Los problemas seguramente son por que el tamaño en bytes de las filas esta alineado a 32 bits:

Asi que quedaria mejor:

biSizeImage = (biBitCount * biWidth + 31) / 32 * biHeight;