2009-10-03 71 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); 
    ... 

至少這樣的代碼保存在源分離。