• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Green Hwk

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

3 mensagens neste tópico

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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  :P

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Encontrei, está aqui:

RGBpixmap.h

RGBpixmap.cpp

Nota: O ficheiro tem de ter 12 ou 24 bits/pixel

          A largura e comprimento da imagem tem de ser uma potência de 2 (se não me engano)

Espero que seja útil.

Cumpr. bk@ero  :smoke:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora