Evil_Ifrit gooby pls | En fait j'ai créé ces deux fonctions aux codes quasi-identiques (mis à part la fameuse comparaison),
la preuve en code (désolé pour la longueur) :
Code :
- void Dilatation(tImage *source, tImage *res) {
- int i, j, val;
- tHistogramme histo;
-
- res->dimX = source->dimX;
- res->dimY = source->dimY;
- res->buffer = (unsigned char*)malloc((res->dimX)*(res->dimY)*sizeof(char));
-
- for ( i=1 ; i < res->dimX ; i++ ) {
- for( j=1 ; j < res->dimY ; j++ ) {
- if(getPixel(source,i,j) == 0) {
- setPixel(res, i-1, j, 0);
- setPixel(res, i, j-1, 0);
- setPixel(res, i, j, 0);
- setPixel(res, i, j+1, 0);
- setPixel(res, i+1, j, 0);
- }
- else
- setPixel(res, i, j,getPixel(source,i,j));
- }
- }
-
- DessineImageGris(IMAGE_TRAITEE, res);
- ConstruitHistogramme(res, &histo);
- DessineHistogramme(HISTOGRAMME_IMAGE_TRAITEE, &histo);
-
- free(res->buffer);
- }
- void Erosion(tImage *source, tImage *res) {
-
- int i, j, val;
- tHistogramme histo;
-
- res->dimX = source->dimX;
- res->dimY = source->dimY;
- res->buffer = (unsigned char*)malloc((res->dimX)*(res->dimY)*sizeof(char));
-
- for ( i=1 ; i < res->dimX ; i++ ) {
- for( j=1 ; j < res->dimY ; j++ ) {
- if(getPixel(source,i,j) == 255) {
- setPixel(res, i-1, j, 255);
- setPixel(res, i, j-1, 255);
- setPixel(res, i, j, 255);
- setPixel(res, i, j+1, 255);
- setPixel(res, i+1, j, 255);
- }
- else
- setPixel(res, i, j,getPixel(source,i,j));
- }
- }
-
- DessineImageGris(IMAGE_TRAITEE, res);
- ConstruitHistogramme(res, &histo);
- DessineHistogramme(HISTOGRAMME_IMAGE_TRAITEE, &histo);
-
- free(res->buffer);
- }
|
Sur la même image, la fonction dilatation marche, et érosion crashe.
Je suis sûr à 100% que l'erreur ne vient pas des fonctions appelées (DessineImageGris & Cie),
Donc je ne pense pas non plus que l'erreur vienne des variables i et j passant hors limite.
D'autres idées ? :]
PS : Au cas où, le code de getpixel :
Code :
- unsigned char getPixel(tImage *img, int x, int y) {
- return (*(img->buffer + (y*img->dimX)+x));
|
---------------
Soon.
|