我正在编写一个简单的程序来读取特定位置的像素并获取其单独的R,G和B值以进行进一步处理。我能够读取 R 和 G 值,但在读取 B 值时出现错误。
这是我的完整代码供参考:
#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))
Error: expression must have integral or unscoped enum type
我尝试在颜色上下文中搜索此错误,但找不到任何合适的解决方案。
我能够读取 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);
附言VC++ 2010(例如,我也假设其他版本(为3 Get中的每一个都给出了警告"C4002: too many actual parameters for macro 'Get?Value'"
?原始代码中的值行,在致命编译器错误之前。最好在将警告设置为高的情况下进行编译,并观察它们的危险信号。