2009-10-04 1 views
-2

Je suis en train de prendre ce code ...c fonction d'appel

char mysmooth1_ descr[] = "my smooth1: My smooth1 replaced avg() func. and assign sum to pixel"; 

void mysmooth1 (int dim, pixel *src, pixel *dst) 
{ 
    int i, j; 
    int ii, jj; 
    pixel_ sum sum; 
    pixel current_ pixel; 

    for (i = 0; i < dim; i++) 
for (j = 0; j < dim; j++) 
{ 
    initialize_pixel_sum(&sum); 
    for(ii = max(i-1, 0); ii <= min(i+1, dim-1); ii++) 
for(jj = max(j-1, 0); jj <= min(j+1, dim-1); jj++) 
    accumulate_sum(&sum, src[RIDX(ii, jj, dim)]); 
{ 
    current_ pixel.red = (unsigned short) (sum.red/sum.num); 
    current_ pixel.green = (unsigned short) (sum.green/sum.num); 
    current_ pixel.blue = (unsigned short) (sum.blue/sum.num);  
    dst[RIDX(i, j, dim)] = current_pixel; 

    } 
    } 
} 

et remplacer l'appel de fonction à accumulate_ somme, avec ce code ...

static void accumulate_ sum (pixel_sum *sum, pixel p) 

{ 

    sum->red += (int) p.red; 

    sum->green += (int) p.green; 

    sum->blue += (int) p.blue; 

    sum->num++; 

    return; 
} 

Maintenant, le code complet que je suis venu avec, ce qui me inclut essayer de remplacer l'appel de fonction pour résumer avec le code réel de somme ressemble à ceci ...

char mysmooth2_descr[] = "my smooth2: My smooth1 replaced avg() func. and assign sum to pixel and accumulate sum func."; 

void mysmooth2(int dim, pixel *src, pixel *dst) 

{ 
    int i, j, num; 
    int ii, jj; 
    pixel_sum sum; 
    pixel current_pixel; 

    for (i = 0; i < dim; i++) 
for (j = 0; j < dim; j++) 
{ 
    initialize_pixel_sum(&sum); 
    for(ii = max(i-1, 0); ii <= min(i+1, dim-1); ii++) 
for(jj = max(j-1, 0); jj <= min(j+1, dim-1); jj++) 
    sum.red += (int) p.red; 
    sum.green += (int) p.green; 
    sum.blue += (int) p.blue; 
    sum.num++; 
{ 
    current_ pixel.red = (unsigned short) (sum.red/sum.num); 
    current_ pixel.green = (unsigned short) (sum.green/sum.num); 
    current_ pixel.blue = (unsigned short) (sum.blue/sum.num);  
    dst[RIDX(i, j, dim)] = current_pixel; 

    } 
    } 
} 

Maintenant je pensais que je l'ai fait correctement mais je continue d'obtenir des erreurs qui m'empêchent de compiler le code ... Si quelqu'un pouvait me dire ce que je fais mal ce serait génial. Ai-je des parenthèses manquantes quelque part? Suis-je censé ajouter plus de code quelque part ... des conseils ou des exemples qui pourraient m'aider à faire cela à l'avenir seraient grandement appréciés. Je vous remercie.

En fait, je me rends compte maintenant que je foiré quelque chose en essayant de remplacer l'appel de fonction accumulate_sum avec le code réel ... toute suggestion ... peut-être ses supports que je foiré ...

+0

Je ne veux pas utiliser la fonction en ligne, je veux juste remplacer l'appel de fonction accumulate_sum avec le code réel ... Après –

+2

indenter le code correctement, il est beaucoup plus facile de voir le problème –

+0

curieux @John pourquoi vous ne voulez pas utiliser en ligne. IMHO inlining combine le gain de vitesse avec une meilleure lisibilité? – fvu

Répondre

5

Vous avez en effet vissé les accolades {}, comme vous l'auriez vu si vous exécutez le code via un formateur tel que astyle.

void mysmooth2(int dim, pixel *src, pixel *dst) 

{ 
    int i, j, num; 
    int ii, jj; 
    pixel_sum sum; 
    pixel current_pixel; 

    for (i = 0; i < dim; i++) 
     for (j = 0; j < dim; j++) { 
      initialize_pixel_sum(&sum); 
      for (ii = max(i - 1, 0); ii <= min(i + 1, dim - 1); ii++) 
       for (jj = max(j - 1, 0); jj <= min(j + 1, dim - 1); jj++) 
        sum.red += (int) p.red; 
      sum.green += (int) p.green; 
      sum.blue += (int) p.blue; 
      sum.num++; 
      { 
       current_ pixel.red = (unsigned short) (sum.red/sum.num); 
       current_ pixel.green = (unsigned short) (sum.green/sum.num); 
       current_ pixel.blue = (unsigned short) (sum.blue/sum.num); 
       dst[RIDX(i, j, dim)] = current_pixel; 

      } 
     } 
} 

Jusqu'à ce que vous ayez un peu d'expérience, utilisez des accolades pour toutes les boucles for et vous pourriez faire moins d'erreurs.