2010-09-23 93 views
2

这是我的第一个问题,希望我会不够清楚......比较C中的真彩色像素

我有这个结构提供

typedef struct COLORTRIPLE 
{ 
    byte blue; 
    byte green; 
    byte red; 
} 

它包含在另一个结构类似:

struct color_temp 
{ 
    COLORTRIPLE color; 
    int temp; 
}; 

和(EDIT)

#define PIXEL(image, row, column) \ 
    image.pixel [(row) * image.width + (column)] 

是一个宏。

所以会有PIXEL(bmpin,row,column).red, PIXEL(bmpin,row,column).green and PIXEL(bmpin,row,column).blue

我需要逐个像素地扫描位图文件,并检查当前像素是否等于color_temp结构的一种颜色。

我想是这样的:

if ((PIXEL(bmpin,row,column))==(map[n].color)) 
{...} 

其中

struct color_temp map[] 

是color_temp的载体。

但是cygwin的GCC说:

error:request for member 'color' in something not a struct or a union 

有什么建议?

感谢

马克

+0

它是C还是C++?你知道有一个区别。 – 2010-09-23 10:18:42

+1

欢迎来到Stackoverflow。下次请使用编辑框上方的'101010'按钮来设置代码的格式,因为Naveen已经为您完成了。另外,如果这是一个家庭作业问题,请添加'作业'标签。 (它会提示人们张贴可帮助您学习的答案,而不是您可以自己翻阅的代码片段。)然后,确定您的代码和问题是C还是C++。除了一些语法上的相似之外,这两者的共同点很少。如果您回复评论,请不要忘记正确填写@address人员,因此答复会显示在他们的“Aswers”标签中。并请阅读常见问题解答。 – sbi 2010-09-23 10:20:38

+0

如果'PIXEL(...)'是一个指针,那么'PIXEL(...)。red'是坏代码。什么是'PIXEL',一个宏? – 2010-09-23 10:25:23

回答

2

试试这个:

int is_pixels_equal (COLORTRIPLE a, COLORTRIPLE b) { 
    return (a.red == b.red && a.green == b.green && a.blue == b.blue); 
} 
+1

不应该是“are_pixels_equal()”吗? – unwind 2010-09-23 11:07:00

+0

@unwind:无论如何。 P: – 2010-09-28 17:58:40

0

不能直接在C比较结构,它并没有定义这样的操作。因此,您必须自己实施它,正如Williham Totland所建议的那样。有关更多讨论,请参阅this question

+0

好吧,我不明白之前:)现在我会尝试。谢谢! – Madrac 2010-09-23 11:14:33