Salut,
Un bour de code vite fait, car je n'ai pas trop le temps... En résumé, il ouvre le fichier jpeg, donne largeur et hauteur et affiche la valeur de la couleur de chacun des pixels sous forme hexadécimal (genre comme en HTML).
Codé en C, testé sous GNU/Linux Debian (Sarge) 3.1, compilé avec gcc 3.3.5 et libjpeg version 6.2. Sans aucun doute facilement portable sur du Win32 au besoin (il existe un portage de la libjpeg).
J'essaierais, si possible, de poser une vraie source à ce sujet prochainement.
#include <stdio.h>
#include <jpeglib.h>
#include <jerror.h>
int main(int argc, char** argv)
{
unsigned char *image;
struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;
FILE *file; // descripteur de fichier.
unsigned char *ligne;
int i,j; // utilisées lors des boucles.
int width, height; // largeur & hauteur de l'image
if (argc < 2)
{
fprintf(stderr, "Usage : %s fichier.jpg\n\n", argv[0]);
exit(2);
}
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);
if ((file=fopen(argv[1],"rb"))==NULL)
{
fprintf(stderr, "Echec lors de l'ouverture du fichier '%s'\n", argv[1]);
exit(1);
}
jpeg_stdio_src(&cinfo, file);
jpeg_read_header(&cinfo, TRUE);
// obtention des dimensions de l'image.
width = cinfo.image_width;
height = cinfo.image_height;
// allocation de mémoire pour le stockage des pixels en mémoire.
image = (char*)malloc(width * height * sizeof(unsigned int));
jpeg_start_decompress(&cinfo);
ligne=image;
while (cinfo.output_scanline<cinfo.output_height)
{
ligne=image+3*width*cinfo.output_scanline;
jpeg_read_scanlines(&cinfo,&ligne,1);
}
jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo);
fprintf(stdout, "largeur x hauteur = %dx%d\n\n", width, height);
// passe dans chaque colonne de pixels (...)
for (i=0;i<cinfo.image_width;i++)
// (...) puis par ligne
for (j=0;j<cinfo.image_height;j++)
{
// on récupère les valeurs des couleurs RVB (...)
int color_r = image[i*256*3+j*3];
int color_v = image[i*256*3+j*3+1];
int color_b = image[i*256*3+j*3+2];
// enfin, affichage style des couleurs style html.
printf("RVB= #%02x%02x%02x\n", color_r, color_v, color_b);
}
}
Compilation : gcc -o testjpg -c testjpg.c -ljpeg
Utilisation : ./testjpg fichier.jpg
Sûrement existe-il quelques bugs... mais, en espérant t'avoir aidé un peu...
Ciao.