GetBValue 错误:表达式必须具有整数或无作用域枚举类型



我正在编写一个简单的程序来读取特定位置的像素并获取其单独的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'"?原始代码中的值行,在致命编译器错误之前。最好在将警告设置为高的情况下进行编译,并观察它们的危险信号。

最新更新