2009-10-03 69 views
0

什么,我试图做的就是把这个函数调用...函数调用与实际的代码

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)]任何帮助,意见,建议将不胜感激。谢谢。

+0

你为什么试图手动内联?保持函数独立,更清晰,并且如果确定它会有好处,编译器会将它内联。它会知道比你或我更好。 – GManNickG 2009-10-03 22:31:59

+2

另外,你在变量,函数名等等中有一堆空格......这些实际存在于你的代码中吗? – GManNickG 2009-10-03 22:37:03

+1

更不用说错误消息中有非ascii字符... – bdonlan 2009-10-03 22:42:15

回答

3

您的current_pixelpixel,而您以前通过&current_pixel,pixel *(指向像素的指针)。所以,你现在需要使用current_pixel.red(带点),而不是current_pixel->red(带有一个“右箭头”),它需要一个箭头左侧的指针;等等。

4

不要手动内联。 Use the inline keyword或更好,让编译器决定。

+1

这是更多的评论,而不是答案。 – GManNickG 2009-10-03 22:34:51

+2

这是一个答案,而不是评论。 +1 – 2009-10-03 23:06:54

+1

这是合理的建议,而不是答案。这些答案属于真实答案的结尾,比如Alex的答案。如果你问了一个关于链表的问题,有人说“使用数组”作为答案,你会认为它有帮助吗?即使这可能是很好的建议,我也不会。用他的代码帮助他,并解释为什么函数应该留给编译器内联。 – GManNickG 2009-10-03 23:09:14

0

如果您必须强制内联,你会更好使用宏

#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); 
    ... 

至少这样的代码保存在源分离。