我正在编写一个简单的程序来读取特定位置的像素,并获取其各自的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))
我尝试在颜色上下文中搜索此错误,但找不到任何合适的解决方案。
答案 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'"
。在警告设置为高的情况下进行编译是很好的做法,并观察它们是否有红旗。