Programación General > Visual C++

 Volcado De Imagen Rgb A Pantalla Win32

(1/1)

diego.martinez:
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 ---   BITMAPINFO bmi;    memset(&bmi, 0, sizeof(bmi));    bmi.bmiHeader.biSize        = sizeof(BITMAPINFOHEADER);    bmi.bmiHeader.biWidth       = jpeg.width;    bmi.bmiHeader.biHeight      = jpeg.height;     bmi.bmiHeader.biPlanes      = 1;    bmi.bmiHeader.biBitCount    = 0;    bmi.bmiHeader.biCompression = BI_RGB;  bmi.bmiHeader.biSizeImage   = 0;     int iRet = StretchDIBits(dc,                         0, 0, jpeg.width, jpeg.height,                         0, 0, jpeg.width, jpeg.height,       jpeg.data,                         &bmi,                         DIB_RGB_COLORS,                         SRCCOPY);  
Estoy haciendo algo mal? por que esta sacado de msdn y no se si estoy llenando la estructura correctamente o que

daltomi:
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/

Saludos.

diego.martinez:
muchas gracias, ya he podido arreglarlo.  :lol:

Amilius:

--- 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.
--- Fin de la cita ---
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;

Navegación

[0] Índice de Mensajes

Ir a la versión completa