вызов функции - PullRequest
       12

вызов функции

0 голосов
/ 04 октября 2009

Я пытаюсь взять этот код ...

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;

    }
    }
} 

и замените вызов функции на накопление_ суммы этим кодом ...

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;
}

Теперь законченный код, который я придумал, который включает в себя попытку заменить вызов функции на сумму действительным кодом суммы, выглядит следующим образом ...

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;

    }
    }
}

Теперь я думал, что сделал все правильно, но продолжаю получать ошибки, которые мешают мне скомпилировать код ... Если бы кто-то мог сказать мне, что я делаю неправильно, это было бы здорово. Я где-то пропустил скобки? Должен ли я добавить больше кода куда-нибудь ... любые советы или примеры, которые помогут мне сделать это в будущем, будут с благодарностью. Спасибо.

На самом деле, теперь я понимаю, что что-то напутал, пытаясь заменить вызов функциирограммируемой суммой на фактический код ... любые предложения ... может быть, это скобки, которые я облажался ...

1 Ответ

5 голосов
/ 04 октября 2009

Вы действительно испортили фигурные скобки {}, как вы видели бы, если бы вы запускали код через такой форматер, как 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;

            }
        }
}

Пока у вас немного опыта, используйте скобки для всех циклов for, и вы можете совершать меньше ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...