Делаем скриншот, анализируем его, затем удаляем - PullRequest
0 голосов
/ 29 мая 2019

Я пытался написать автоматический кликер для простой онлайн-игры (с кодировкой php), но у меня возникли проблемы с анализом цветов на экране.(Английский не мой родной язык, извините!) Я уже немного изучал C ++ в университете, но только для научных ориентированных простых консольных программ.(Редактировать: я работаю над окнами !! забыл упомянуть)

Я уже пробовал использовать функцию getpixel, но, поскольку мое окно Chrome уменьшено на 80%, чтобы получить полную игру в кадре, онокажется, у меня есть некоторые проблемы, связанные с DPI, но из-за этого у меня закружилась голова.

После просмотра видео с Codebullet я подумал, что лучше подойти к этому, сделать снимок экрана проблемной области, проанализироватьчтобы увидеть, заполнено ли условие, удалите снимок экрана.Проблема в том, что я понятия не имею, как мне этого добиться, и в этот раз Google мало чем помог: \

Мой код очень грязный, поэтому я не могу показать его прямо сейчас, но в основном это просто:

- щелкните там

- щелкните там через 5 секунд

- щелкните там, если этот пиксель имеет этот цвет

-повторить

Есть ли простой ответ на это?Я был бы очень благодарен, если есть.Хорошего дня!:)

1 Ответ

2 голосов
/ 29 мая 2019

Вам не нужно сохранять снимок экрана, если вы не хотите:

Передать дескриптор целевого окна в GetDC (), t вернет контекст устройства окна.

Передайте контекст устройства в CreateCompatibleDC () для создания совместимого DC.

Используйте CreateCompatibleBitmap (), передав DC и размер окна.Это возвращает дескриптор к растровому изображению

Используйте SelectObject (), чтобы выбрать растровое изображение

Используйте BitBlt (), чтобы выполнить битовый перевод выбранных пикселей из обычного DC в совместимый DC, используяSRCCOPY растровый код операции для создания нормальной копии.

Создание объекта BITMAP.Используйте GetObject () и передайте дескриптор растровому изображению, которое вы создали.

Создайте BITMAPINFOHEADER и определите переменные-члены.Создайте массив беззнаковых символов, достаточно большой, чтобы вместить все пиксели из вашего растрового изображения.

Используйте GetDIBits (), передавая дескриптор совместимому растровому изображению, заголовок растрового изображения и указатель на массив пикселей.Это загружает пиксели из растрового изображения в массив пикселей.

Теперь проанализируйте все эти сочные данные пикселей, найдите цвета, которые вы ищете, и протестируйте результаты в соответствии с вашими условиями, чтобы решить, что делать дальше.

Не забудьте удалить объекты и освободить контексты памяти и устройства.

Я полагаю, что это учебник, которому я следовал, где я учился, благодаря MSDN: https://docs.microsoft.com/en-us/windows/desktop/gdi/capturing-an-image

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...