Неверные значения, возвращаемые функцией GetPixel в Windows при определении цвета пикселя.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Неверные значения, возвращаемые функцией GetPixel в Windows при определении цвета пикселя.

Сообщение Anonymous »

Использование функции GetPixel для получения цвета пикселя в центре экрана (x = 960, y = 540) во время выполнения игры возвращает неправильные значения цвета. Ожидается, что функция получит точные значения компонентов RGB для пикселя по этим координатам, но возвращаемые значения не соответствуют фактическим цветам, видимым на экране во время игры.
видео с проблемой:

Код: Выделить всё

#include 
#include 

#define SCREEN_WIDTH 1920
#define SCREEN_HEIGHT 1080
#define DELAY_UPDATE_RATE 10

void cycle_pixel() {
short x = SCREEN_WIDTH / 2;
short y = SCREEN_HEIGHT / 2;
HDC Screen_HDC = GetWindowDC(NULL);

while (true) {
Sleep(DELAY_UPDATE_RATE * 15);
const COLORREF Pixel = GetPixel(Screen_HDC, x, y);
printf("x: %3d   y: %3d   | R: %3d   G: %3d   B: %3d\n", x, y, GetRValue(Pixel), GetGValue(Pixel), GetBValue(Pixel));
}

ReleaseDC(HWND_DESKTOP, Screen_HDC);
}

int main() {
SetProcessDPIAware();
cycle_pixel();
return 0;
}
Шаги по воспроизведению:
  • Скомпилируйте и запустите приведенный выше код в системе с разрешение экрана
    1920x1080.
  • Откройте игру и продолжайте ее работу в полноэкранном или оконном режиме.
  • Наблюдайте за выводом программа, показывающая координаты и RGB
    значения пикселя.
  • Сравните значения RGB, напечатанные программой, с фактическим цветом
    пикселя в центре игрового окна.
журнал

Код: Выделить всё

x: 960   y: 540   | R:  29   G:  91   B: 255
x: 960   y: 540   | R:  16   G:  29   B: 217
x: 960   y: 540   | R:  22   G:  50   B: 232
x: 960   y: 540   | R:  26   G:  72   B: 229
x: 960   y: 540   | R:   0   G: 129   B: 255
x: 960   y: 540   | R:  52   G:  24   B: 255
x: 960   y: 540   | R:  17   G:  64   B: 222
x: 960   y: 540   | R:   0   G:  65   B: 222
x: 960   y: 540   | R:  22   G:  85   B: 232
x: 960   y: 540   | R:   0   G: 134   B: 232
x: 960   y: 540   | R:  17   G:  32   B: 255
x: 960   y: 540   | R:  17   G: 116   B: 255
x: 960   y: 540   | R:   0   G: 105   B: 255
x: 960   y: 540   | R:  22   G: 139   B: 253
x: 960   y: 540   | R:   0   G:  75   B: 220
x: 960   y: 540   | R:   0   G:  23   B: 217
x: 960   y: 540   | R:  15   G:  37   B: 217
x: 960   y: 540   | R:  26   G:  40   B: 229
x: 960   y: 540   | R:  29   G:  33   B: 255
x: 960   y: 540   | R:   0   G:  41   B: 229
x: 960   y: 540   | R:  18   G:  81   B: 232
x: 960   y: 540   | R:   0   G: 135   B: 255
x: 960   y: 540   | R:  50   G:  27   B: 255
x: 960   y: 540   | R:   0   G:  75   B: 220
x: 960   y: 540   | R:  17   G:  88   B: 225
x: 960   y: 540   | R:   0   G:  33   B: 255
x: 960   y: 540   | R:  27   G: 159   B: 255
x: 960   y: 540   | R:  27   G:  52   B: 255
Ожидаемое поведение:
Функция GetPixel должна возвращать точные значения RGB для пикселя в указанных координатах в центре. экрана во время игры. По крайней мере, на статичном изображении, даже не в играх, пиксели не должны иметь случайный цвет в одной и той же координате.
Фактическое поведение:
Возвращаемые значения RGB не соответствуют фактическим цветам пикселя в центре игрового экрана.
Дополнительная информация:< /p>
Это несоответствие может быть связано с разрешением системы. масштабирование или способ визуализации игровой графики, что влияет на точность GetPixel. Функция SetProcessDPIAware() была добавлена ​​для учета масштабирования, но проблема осталась. Потенциальные причины включают неверные координаты пикселей из-за масштабирования или ограничений GetPixel при чтении цветов из динамической среды, отображаемой в игре.

Подробнее здесь: https://stackoverflow.com/questions/791 ... etermining
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»