Jump to content

[C++] Ajuda: Carregar imagem para memória!


Green Hwk

Recommended Posts

Boas, eu estou a fazer um código em c++, a usar bibliotecas de openGl, que parece estar tudo a funcionar. Mas agora tenho que carregar uma imagem em TGA, ou outro formato qualquer e não sei fazer, tive a ver em tutoriais. E fiz assim->

void init(void)
{
image_t   temp_image;
glShadeModel(GL_SMOOTH);							
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);				
glEnable (GL_COLOR_MATERIAL );

glEnable(GL_TEXTURE_2D );
glPixelStorei(GL_UNPACK_ALIGNMENT, 1 );
glGenTextures(1, &texture_id);

glBindTexture(GL_TEXTURE_2D, texture_id );
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);

}

O código funciona todo, e cria o que quero, mas quando faço, tgaLoad  ("songoku.tga", &temp_image, TGA_FREE | TGA_LOW_QUALITY ); para carregar a imagem, e faço build e depois start (estou a usar o visual studio), dá me :

First-chance exception at 0x004170e6 in Exercicio2.exe: 0xC0000005: Access violation reading location 0x0000000c.

Unhandled exception at 0x004170e6 in Exercicio2.exe: 0xC0000005: Access violation reading location 0x0000000c..

eu faço break e abre um ficheiro fclose.c e aponta para um sitio, eu nem estou a usar esse ficheiro no projecto.

Alguem me podia ajudar com isto, de carregar uma imagem, pode nem ser com a função tgaLoad?

Link to comment
Share on other sites

Bem Green Hwk

Sinceramente nunca usei essa função. Já fiz programas em OpenGL e usei outra biblioteca (classe) que existe na net que permite carregar imagens bmp.

Foi essa biblioteca que aconselhei a tofas a usar neste trabalho: [Projecto][ C++ / Opengl ] Jogo do galo. A biblioteca é fácil de perceber como funciona (é extremamente simples criar outras texturas) e simples de usar no código.

Sinceramente não tenho aqui a classe a mão, tenho de ir outra vez ao baú. Se quiseres, pede-me por pm e procuro encontrar para disponibilizar-te...

Voltando a tua situação, o erro provocado no fclose é devido ao mau uso da memória, ou seja, ou estás a aceder a memória que não tens direito ou algo parecido, como o próprio erro diz Access violation.

E se isso só ocorre quando colocas a instrução "tgaLoad  ("songoku.tga", &temp_image, TGA_FREE | TGA_LOW_QUALITY );" pode provávelmente ser que não estás a conseguir carregar a imagem e ao tentares aceder à variável temp_image, estejas a cometer um Access violation. Para verificares se é isto, cria um breakpoit antes e depois da instrução e verifica se há memória alocada na variável  temp_image.

Cumpr. bk@ero  😛

PS: Usa a ferramenta GeSHi para postares código, assim o teu código fica mais legível.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.