fafa21081974
Messages postés14Date d'inscriptionmardi 19 juillet 2005StatutMembreDernière intervention19 septembre 2005
-
3 août 2005 à 11:36
meech
Messages postés209Date d'inscriptionvendredi 11 avril 2003StatutMembreDernière intervention14 août 2007
-
3 août 2005 à 16:48
Bonjour tout le monde
J'ai téléchargé la librairie du groupe JPeg qui permet au vu de ce que
j'ai vu sur les forums de manipuler des fichiers jpeg. Mais le site
ijp.com qui aurait pu me donner plus d'explications n'est pas
accessible.
Aussi j'aurai aimé savoir si l'un ou l'une d'entre vous pourrait me
guider pour in staller la librairie et comment l'utiliser sachant que
je voudrais lire la valeur des pixels
meech
Messages postés209Date d'inscriptionvendredi 11 avril 2003StatutMembreDernière intervention14 août 2007 3 août 2005 à 16:11
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.
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);
}
}
fafa21081974
Messages postés14Date d'inscriptionmardi 19 juillet 2005StatutMembreDernière intervention19 septembre 2005 3 août 2005 à 16:31
Merci meech.
j'ai lu ton code et je vais essayer de l'adapter. je pense que cela
devrait pas mal m'aider car ca correspond quasi à ce qur je voulais.
mais juste une petite question de néophyte que je suis car je démarre
en programmation
meech
Messages postés209Date d'inscriptionvendredi 11 avril 2003StatutMembreDernière intervention14 août 2007 3 août 2005 à 16:48
A pas grand chose : juste à regarder s'il y a deux paramètres passés à la ligne de commande :
1. Le premier est toujours le nom du programme (et peut-être son chemin complet, je ne sais plus...)
2. Le second, et dans ce code, en particulier, est utilisé pour
spécifier le nom du fichier JPEG à ouvrir. Si ce nom n'est pas fourni,
alors l'application se ferme car elle n'a pas de fichier à ouvrir.