[C++] Ajuda: Carregar imagem para memória! - C++ - Portugal-a-Programar
Por Green Hwk, 17 de Outubro de 2006 em C++
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->
image_t   temp_image;
glEnable (GL_COLOR_MATERIAL );
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?
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.