видео с проблемой:
Код: Выделить всё
#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