Ошибка 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

Я попытался найти эту ошибку в цветовом контексте, но не смог найти подходящего решения.

1

Решение

Я могу прочитать значения 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 (в качестве примера, и я предполагаю, что и другие версии) выдает предупреждение "C4002: too many actual parameters for macro 'Get?Value'" для каждой из 3 строк Get? Value в исходном коде до фатальной ошибки компилятора. Рекомендуется компилировать предупреждения с высокими значениями и смотреть их на наличие красных флажков.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]