GetBValue错误:表达式必须具有整数或未整合的枚举类型

时间:2015-11-24 15:59:08

标签: c++ visual-c++ enums getpixel

我正在编写一个简单的程序来读取特定位置的像素,并获取其各自的R,G和B值以供进一步处理。 我能够读取R和G值,但是当我读取B值时出现错误。

以下是我的完整代码供参考:

clear temporary_variable

我在这一行收到错误: #include <iostream> #include<Windows.h> using namespace std; int main(){ int d; HDC dc = GetDC(NULL); COLORREF rcolor = GetRValue(dc, 1, 1); COLORREF gcolor = GetGValue(dc, 1, 1); COLORREF bcolor = GetBValue(dc, 1, 1); ReleaseDC(NULL, dc); cout << rcolor << endl; cout << gcolor << endl; cin >> d; }

出现错误:

  

COLORREF bcolor = GetBValue(dc, 1, 1);

     

#define GetBValue(rgb) (LOBYTE((rgb)>>16))

我尝试在颜色上下文中搜索此错误,但找不到任何合适的解决方案。

1 个答案:

答案 0 :(得分:2)

  

我能够读取R和G值,但是当我读取G值时出现错误。

我认为最后一个应该是B值。但无论如何,你没有正确地阅读任何值。 R和G恰好在没有错误的情况下编译,但会从HDC句柄值返回随机位。

你想要的可能就是这个。

HDC dc = GetDC(NULL);
COLORREF rgb = GetPixel(dc, 1, 1);

BYTE rcolor = GetRValue(rgb);
BYTE gcolor = GetGValue(rgb);
BYTE bcolor = GetBValue(rgb);

ReleaseDC(NULL, dc);

P.S。 VC ++ 2010(作为示例,我还假设其他版本)在致命编译器错误之前为原始代码中的3个Get?Value行中的每一行提供警告"C4002: too many actual parameters for macro 'Get?Value'"。在警告设置为高的情况下进行编译是很好的做法,并观察它们是否有红旗。