// la fonction provient d'un tutoriel
//
http://www.linuxgraphic.org/
// par xavier michalon
// Bye !
// la lib jpeg est ecrite en C et non pas en C++
#ifdef __cplusplus
extern "C" {
#endif
#include <jpeglib.h>
#include <jerror.h>
#ifdef __cplusplus
}
#endif
void loadJpegImage(char *fichier)
{
struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;
FILE *file;
unsigned char *ligne;
int i,j;
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);
if ((file=fopen(fichier,"rb"))==NULL)
{
char phr[100]; vidage(phr,100);
strcat(phr,"Erreur : impossible d'ouvrir le fichier ");
strcat(phr,VAR);
strcat(phr,".jpg\n");
fprintf(stderr,phr);
vidage(phr,100);
exit(1);
}
jpeg_stdio_src(&cinfo, file);
jpeg_read_header(&cinfo, TRUE);
if ((cinfo.image_width!=1440)||(cinfo.image_height!=720)) {
fprintf(stdout,"Erreur : l'image doit etre de taille 1440x720\n");
exit(1);
}
if (cinfo.jpeg_color_space==JCS_GRAYSCALE)
{
jpeg_start_decompress(&cinfo);
ligne=image_gris;
while (cinfo.output_scanline<cinfo.output_height)
{
ligne=image_gris+1440*cinfo.output_scanline;
jpeg_read_scanlines(&cinfo,&ligne,1);
}
jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo);
// rearangement de l'image scannee dans le tableau de texture 3D
// ici nous sommes en niveau de gris, donc on copie le meme octet dans
// chacune des 3 cases RGB
// merci � jonatahn
for (i=0;i<720;i++)
for (j=0;j<1440;j++)
{
texture[i][j][0]=image_gris[i*1440+j];
texture[i][j][1]=image_gris[i*1440+j];
texture[i][j][2]=image_gris[i*1440+j];
}
}
else
{
jpeg_start_decompress(&cinfo);
ligne=image_rgb;
while (cinfo.output_scanline<cinfo.output_height)
{
ligne=image_rgb+3*1440*cinfo.output_scanline;
jpeg_read_scanlines(&cinfo,&ligne,1);
}
jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo);
// rearangement de l'image scannee dans le tableau de texture 3D
for (i=0;i<720;i++)
for (j=0;j<1440;j++)
{
texture[i][j][0]=image_rgb[i*1440*3+j*3];
texture[i][j][1]=image_rgb[i*1440*3+j*3+1];
texture[i][j][2]=image_rgb[i*1440*3+j*3+2];
}
}
}