Bonjour à tous,

J'ai fait un petit programme me servant à redimensionner les images d'un répertoire, et à les renommer.

ça marche assez bien, mais pour les dossiers où il y a beaucoup de beaucoup de photos, ça plante... Je finis par avoir un message d'erreur me disant à peu près :

Insufficient memory (out of memory), error in function cvAlloc (C:\\...\cxalloc.cpp)


Voici (en gros) le code
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
 
IplImage *Img_in ;
IplImage *Img_out;
 
int main(int argc, char** argv)
{
 
    WIN32_FIND_DATA File;
    HANDLE hSearch;
    BOOL re;
 
    char image_in[50];
    char image_out[100];
    char image_out2[100];
    char repertoire[100];
    char temp[100];
    char repertoire_mini[100];
 
 
    /* Le resultat recherche : un nombre. */
    int nombre_deb = 1;
 
    /* Un booleen pour savoir si la chaine est valide. */
    int ret = 0;
 
/*
choix de divers paramètres : dossier, nom de renommage... pas très important je pense par rapport au problème
*/
 
 
    //recherche des images jepg du dossier
    hSearch=FindFirstFile("*.jpg", &File);
    if(hSearch ==  INVALID_HANDLE_VALUE)
    {
        printf("Aucune image trouvee.\n");
       return FALSE;
    }
 
    re=TRUE;
    do
    {
 
        /* construction du nom des images d'entrée (image_in) et de sortie (image_out et image_out2) */
 
        printf("%s %s\n",image_in,image_out);
 
        //on redimensionne en 1024*1024
        redim(1024,1024, image_in,image_out, Img_in, Img_out);
 
        //on crée la miniature et le fichier HTML associé a l'image
        redim2(100,100, image_out,image_out2, Img_in, Img_out);
 
        re = FindNextFile(hSearch, &File);
    } while(re);
 
    FindClose(hSearch);
 
    cvReleaseImage(&Img_in);
    cvReleaseImage(&Img_out);
 
    return 0;
}
La fonction redim (redim2 appelle redim() et en plus écrit un fichier HTML)

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
26
27
28
int redim(float l_max, float h_max, char* img_in, char* img_out, IplImage *Img_in, IplImage *Img_out)
{
 
    int l_in, h_in;
    int l_out, h_out;
    float test_h, test_l;
    CvSize taille_image_in;
 
	Img_in = cvLoadImage(img_in,CV_LOAD_IMAGE_COLOR);
	Img_out = 0;//cvLoadImage(img_in,CV_LOAD_IMAGE_COLOR);
	if (!Img_in){
		printf("Could not load image file\n");
		return -1;
	}
 
  /* divers calculs concernant le redimensionnement */
 
        Img_out = cvCreateImage(cvSize(l_out, h_out),Img_in->depth, Img_in->nChannels);
 
 
        int TYPE_ALGO = CV_INTER_NN;
        cvResize(Img_in,Img_out,TYPE_ALGO);
    }
        if (!cvSaveImage(img_out, Img_out))
            printf("Could not save: %s\n");
 
	return 0;
}
Voilà où j'en suis... je soupçonne fortement un problème lié à l'allocation de mémoire de Img_in et Img_out, mais je ne sais pas comment le résoudre...
Si quelqu'un peut m'aider, c'est cool ^^

Merci d'avance !