GetBValue Error: Expression must have integral or unscoped enum type

GetBValue Error: Expression must have integral or unscoped enum type

我正在编写一个简单的程序来读取特定位置的像素并获取其单独的 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

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

I am able to read the R and the G values but I get an error when I read the G value.

我假设最后一个应该是 B 值。但无论如何,您没有正确读取 any 个值。 R 和 G 恰好编译没有错误,但会 return 来自 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'"。将警告设置为高位进行编译并观察它们是否存在危险信号是一种很好的做法。