Bonjour � tous,
Je programme sous VC++.net, et je fais un petit programme qui sauve des points d'une image, et qui permet aussi de les recharger lors d'une future session (pratique si on veut pas tout se retaper).
J'ai donc deux fonctions (inspir�es du C, je suis de la vieille �cole):
*pour sauver les points
*pour charger les points:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 void sauvePDC (int **depart,int **arrivee, int a, float coeff_mul) { int *buf; FILE *fichier = NULL; buf = (int*) calloc (4*a+1,sizeof (int)); buf[0] = a; for (int i=0 ; i<a ; i++) { buf[i+1] = int (floor (float(depart[i][0])/coeff_mul) + 0.5); buf[i+a+1] = int (floor (float(depart[i][1])/coeff_mul) + 0.5); buf[i+2*a+1] = int (floor (float(arrivee[i][0])/coeff_mul) + 0.5); buf[i+3*a+1] = int (floor (float(arrivee[i][1])/coeff_mul) + 0.5); } fichier = fopen("config.XY", "w+"); if (fichier != NULL) { fwrite(buf, sizeof(int), 4*a+1, fichier); fclose(fichier); } else { std::cerr << "erreur d'ouverture du fichier" ; std::exit(-1); } free(buf); }
*L'appel se fait via la fonction main.cpp, dont voici les bouts de code qui vous int�ressent:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 void chargePDC (int** depart, int** arrivee, int *a, float coeff_mul) { FILE* fichier = NULL; int *buf; buf = (int*) calloc (4*NBPOINTS+1,sizeof (int)); fichier = fopen("config.XY", "r"); if (fichier != NULL) { fread(buf,sizeof(int),4*NBPOINTS+1, fichier); fclose(fichier); } else { std::cerr << "erreur d'ouverture du fichier" ; std::exit(-1); } *a =buf[0]; for (int i=0; i<(*a); i++){ depart[i][0] = int(floor( float( buf[i+1]) * coeff_mul) + 0.5); depart[i][1] = int(floor( float(buf[i+(*a)+1]) * coeff_mul) + 0.5); arrivee[i][0] = int(floor( float(buf[i+2*(*a)+1]) * coeff_mul) + 0.5); arrivee[i][1] = int(floor( float(buf[i+3*(*a)+1]) * coeff_mul) + 0.5); } free(buf); }
Lors de mes tests, j'avais trouv� que mon syst�me de sauvegarde dans ce config.XY fonctionnait correctement. Seulement, lorsque s'autres l'ont test�, ils m'ont rapport� des erreurs bizarres: les points parfois se retrouvait tous coll�s en haut de l'image. En effet, le fichier config.XY contenait alors beaucoup de 0...
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #define NBPOINTS 50 /* Allocation dynamique de m�moire pour les points de contr�les */ depart = (int**) calloc (NBPOINTS,sizeof(int*)); for (int i= 0;i<NBPOINTS;i++) { depart[i] = (int*) calloc(2, sizeof(int)); } arrivee = (int**) calloc (NBPOINTS,sizeof(int*)); for (int i= 0;i<NBPOINTS;i++) { arrivee[i] = (int*) calloc(2, sizeof(int)); } /*Sauve les Points de Controle */ if (main_disp.key == cimg_library::cimg::keyS) { sauvePDC (depart,arrivee, a, coeff_mul); } /* Charge les points de controles*/ if (main_disp.key == cimg_library::cimg::keyC) { chargePDC(depart,arrivee, &a, coeff_mul); }![]()
Je n'ai pas r�ussi � identifier le probl�me, mais je ne programme surement pas depuis assez longtemps pour arriver � tout comprendre...
Merci d'avance pour votre aide.
P.S : j'ai bien lu la FAQ concernant la lecture/�criture de fichier, mais avant de tout recoder, je voulais d'abord vous "consulter". Comme je g�re des images comme des matrices, et que j'ai pas voulu me lancer dans des vecteurs de vecteurs, je sais pas si c'est un bonne id�e de jouer avec les "fstream"....
Partager