Autor
|
Tema: Cargar y mostrar image BMP c++ (Leído 3,994 veces)
|
razormta
Desconectado
Mensajes: 18
|
¿ Que ven mal en mi codigo ? Es que me muestra un cuadro gris pero no carga la textura .... no entiendo porque Estoy algo desesperado y puede que este pasando algo por alto, si alguien ve algo malo digame T_T PD: empeze a hacerlo hace unas horas y no he estudiado mucho con respecto al manejo de BMP's, tal ves ese sea mi problema bool SPRITE::LoadBMP(const char * path, GLuint * texture) { std::ifstream img(path, std::ios::binary); if( !img ) return(False); BITMAPFILEHEADER imgHeader; BITMAPINFOHEADER imgInfo; img.read( (char*)&imgHeader,sizeof(BITMAPFILEHEADER) ); img.read( (char*)&imgInfo, sizeof( BITMAPINFOHEADER ) ); if (imgHeader.bfType != 0x4D42) return(False); int size = ( imgInfo.biSizeImage ); BYTE * pix =new BYTE[size]; img.read( (char*)pix, size ); img.close(); BYTE * data = new BYTE[size]; for (int i = 0; i < size; i += 3) { data[i+0] = pix[i+2]; data[i+1] = pix[i+1]; data[i+2] = pix[i+0];; } unsigned int w = imgInfo.biWidth; unsigned int h = imgInfo.biHeight; glGenTextures(1, texture); glBindTexture(GL_TEXTURE_2D, *texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, data); glBindTexture(GL_TEXTURE_2D, NULL); return(True); }
|
|
|
En línea
|
|
|
|
razormta
Desconectado
Mensajes: 18
|
Resolver problemas es mi mayor adiccion, ya lo resolvi... pff ... punteros xd , de todas maneras deberia borrar el post no ?, haha ... no me hace falta un foro lml okno xd
|
|
|
En línea
|
|
|
|
engel lex
|
no, no se borra coloca tu solucion... por si alguien se enfrenta a eso luego... o de todas formas queda como un aporte
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
razormta
Desconectado
Mensajes: 18
|
Haciendo caso al chico de arriba, aca mi solucion, primero estudiar a fondo como funcionan las BMP's, todo acerca de el padding y aprender la diferencia de imagenes de 8 bits, 16 bits , 24 bits etc ... Por ahora mi programa trabaja con imagenes bmp de 24 bits, pero me animare para hacerlo de todos los formatos posibles, algo asi como freeimage xd bool SPRITE::LoadBMP(const char * path, GLuint * texture) { /**/ std::ifstream img(path, std::ios::binary); if( !img ) return(False); /**/ BITMAPINFOHEADER imgHeader; BITMAPFILEHEADER imgInfo; img.read( (char*)&imgHeader,sizeof(BITMAPFILEHEADER) ); img.read( (char*)&imgInfo, sizeof( BITMAPINFOHEADER ) ); /**/ if (imgHeader.bfType != 0x4D42) { img.close(); return(False); } /**/ int W = imgInfo.biWidth; int w = 4* ( ( W * 24 + 31 ) /32 ); int h = imgInfo.biHeight; int size = abs(w*h); /**/ BYTE * pix = new BYTE[size]; img.seekg(imgHeader.bfOffBits); img.read( (char*)pix, size ); /**/ BYTE * data = new BYTE[size]; bool done = true; switch(imgInfo.biBitCount) { case 24: BMP_24_TO_24( pix, data, (W*h) ); } /**/ if( done ) { glGenTextures(1, texture); glBindTexture(GL_TEXTURE_2D, *texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, W, h, 0, GL_RGB, GL_UNSIGNED_BYTE, data); glBindTexture(GL_TEXTURE_2D, NULL); } /**/ delete[] pix; delete[] data; /**/ return(True); }
Es probable que la funcion no sea muy elegante , pero deben tener en cuenta que lo que se de programacion lo aprendi de ejemplos y no de manuales xd void SPRITE::BMP_24_TO_24( BYTE * data, BYTE * new_data, int Size ) { int index = 0; do { new_data[(index*3)+0] = data[(index*3)+2]; new_data[(index*3)+1] = data[(index*3)+1]; new_data[(index*3)+2] = data[(index*3)+0]; index++; }while( index < Size ); }
Mmmm, para mostrar una imagen de 8 bits, primero la transformare a 24 bits y luego llamare a la funcion BMP_24_TO_24, pero eso me tomara un tiempo, hasta ahora tnego solo esto xd
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Source] Water Image - Efecto para mostrar logos o imagenes
Programación Visual Basic
|
Mad Antrax
|
2
|
4,843
|
8 Abril 2007, 19:41 pm
por ~~
|
|
|
Necesito cargar imagen en image
Programación Visual Basic
|
& eDu &
|
2
|
1,817
|
23 Agosto 2008, 13:52 pm
por & eDu &
|
|
|
.Net Cargar DLL y Mostrar Funciones
.NET (C#, VB.NET, ASP)
|
BgCRaCK
|
2
|
3,686
|
16 Marzo 2011, 20:46 pm
por BgCRaCK
|
|
|
convertir o mostrar binary image de la base de datos
PHP
|
gAb1
|
0
|
1,320
|
24 Septiembre 2014, 00:45 am
por gAb1
|
|
|
Error al cargar image live de Fedora 25 mediante usb
GNU/Linux
|
0and6
|
2
|
2,245
|
7 Abril 2017, 06:56 am
por 0and6
|
|