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
Ir a la versión completa