Pages : 1
#1 Le 14/11/2006, à 21:02
- Stephanie
[C]Parcourir une image[Résolu]
Salut,
j'aurais besoin d'aide pour parcourir une image et ainsi récupérer le min et le max de l'image entre les bornes [xmin, ymin, xmax, ymax]
Dernière modification par Stephanie (Le 03/12/2006, à 14:58)
Hors ligne
#2 Le 14/11/2006, à 21:10
- abetsic
Re : [C]Parcourir une image[Résolu]
Un truc du genre :
*min=0xFFFFFFFF
for (x=xmin; x<xmax; x++)
{
for (y=ymin; y<ymax; y++)
{
if (image->pixel[i][j] < *min) *min=image->pixel[i][j];
}
}
(aux erreurs de syntaxe près)
ça ne marche pas ? t'as essayé au moins ? Si tu veux qu'on t'aide il faut que tu nous dises où ça coince...
Hors ligne
#3 Le 14/11/2006, à 21:37
- abetsic
Re : [C]Parcourir une image[Résolu]
... Ca manque de précision...
Qu'est ce qui ne marche pas ?
Quelle est l'erreur ?
Quelle est la bibliothèque utilisée pour ouvrir et parcourir l'image ?
Pourquoi initialises tu min et max avec les valeurs en xmin ? (c'est pas faux, c'est juste que je trouve ça bizarre...)
Comme ça je dirais que l'erreur doit venir de largeur, qui ne correspond pas à la largeur de ton image, mais uniquement à la largeur de la zone que tu regardes.
Ensuite, c'est plutôt j (déplacement vertical) que j'aurai multiplié par largeur et non pas i qui correspond au déplacement horizontal dans l'image.
Hors ligne
#4 Le 14/11/2006, à 22:13
- abetsic
Re : [C]Parcourir une image[Résolu]
J'avais fait un parcours d'image en C il y a quelques années, j'utilisais aussi png.h mais je n'avais pas de type t_image... voilà ce que j'ai retrouvé adapté à ton problème
png_structp png_ptr = NULL;
png_infop info_ptr = NULL;
png_bytep *row_pointers = NULL;
/* Allocate/initialize the memory for image information. REQUIRED. */
info_ptr = png_create_info_struct(png_ptr);
/* Set up the input control if you are using standard C streams */
png_init_io(png_ptr, fp);
png_read_info(png_ptr, info_ptr);
row_pointers = png_malloc(png_ptr, info_ptr->height*sizeof(png_bytep));
png_set_rows(png_ptr, info_ptr, row_pointers);
png_read_image(png_ptr, row_pointers);
for (row = 0; row < info_ptr->height; row++)
{
for (col = 0; col < info_ptr->width; col++)
{
// utilisation de : row_pointers[row][3*col];
}
}
Pour toi ça donnerait qqche du genre :
min=0xFFFFFFF // initialisé a qqch de très grand comme ça il prendra des valeurs min successives de l'image
for (y=ymin; y<ymax; y++) // on parcourt les lignes
{
for (x=xmin; x<xmax; x++) // on parcourt les pixels de chaque ligne
{
if (min > image->pixels[y][x*3]) min = image->pixels[y][x*3] // le *3 parce que il y a trois composantes (attention c'est peut être *4 si il y a un canal alpha)
// mais comme ton tableau pixel a l'air d'être un talbeau à une seule dimension :
if (min > image-> pixels[y*largeur_totale_de_ton_image+x] bla bla;
// x est peut être à multiplier par 3 si l'image en mémoire est en trois couleur, si tu l'as ouverte en noir et blanc ce n'est sûrement pas nécessaire.
}
}
Je le vois plus comme ça
Dernière modification par abetsic (Le 14/11/2006, à 22:14)
Hors ligne
#5 Le 15/11/2006, à 16:01
- Stephanie
Re : [C]Parcourir une image[Résolu]
Ca fonctionne
Merci de ton aide
Hors ligne
#6 Le 15/11/2006, à 17:31
- abetsic
Re : [C]Parcourir une image[Résolu]
De rien
Juste pour savoir où était le problème ?
J'imagine dans l'utilisation du tableau de pixels ? Comment l'as tu adressé ?
Hors ligne