вызов функции с актуальным кодом - PullRequest
0 голосов
/ 04 октября 2009

что я пытаюсь сделать, это взять этот вызов функции ...

assign_sum_to_pixel(&current_pixel, sum);

и замените его на фактический код, который он вызывает, это ...

/* 
 * assign_ sum_ to_ pixel - Computes averaged pixel value in current_pixel 
 */


static void assign_ sum_ to_ pixel (pixel *current_ pixel, pixel_ sum sum) 

{

    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);
    return; 

}

Что я придумал, так это ...

/*
 * mysmooth1 - my smooth1 
 */


char mysmooth1_descr[] = "my smooth1: My smooth1";

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);***    


    ***(These three lines above are the lines I inserted which is where the function call use to be)***

    dst[RIDX(i, j, dim)] = return;

    }
    }
}

но ... по какой-то причине, когда я запускаю код, он не работает, выдавая эту ошибку

kernels.c:456: error: invalid type argument of â->â

kernels.c:457: error: invalid type argument of â->â

kernels.c:458: error: invalid type argument of â->â

kernels.c:459: warning: statement with no effect

именно там, где я добавил новый код ...

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)] любая помощь, комментарии, предложения будут с благодарностью. Спасибо.

Ответы [ 3 ]

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

Не вставляйте вручную. Используйте встроенное ключевое слово или лучше, пусть решит компилятор.

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

Ваш current_pixel является pixel, тогда как ранее вы передавали &current_pixel, pixel * (указатель на пиксель). Итак, теперь вам нужно использовать current_pixel.red (с точкой), , а не current_pixel->red (с "стрелкой, направленной вправо"), для которой нужен указатель на левой стороне стрелки; и пр.

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

Если вам нужно принудительно встроить, вам лучше использовать макрос

#define ASSIGN_SUM_TO_PIXEL (current_pixel, sum)\
do {\
    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);\
} while(0)

затем используйте его как

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)]);
{
    ASSIGN_SUM_TO_PIXEL (current_pixel, sum);
    ...

По крайней мере, таким образом код хранится отдельно в источнике.

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