Получить данные изображения известного процесса - PullRequest
0 голосов
/ 02 декабря 2018

Для обработки изображений я хочу получить всю информацию о пикселях из данного процесса.Конкретно, для тестирования алгоритма хеширования изображений для идентификации карт, поэтому мне нужно получить скриншот данного процесса.Как я могу решить это в Windows?Моя идея пока что:

  1. Получить имя процесса.

  2. Получить идентификатор процесса

  3. Получить дескриптор окна

Я понятия не имею, как идти дальше от этой точки.Надеюсь, понятно, чего я хочу достичь.

1 Ответ

0 голосов
/ 02 декабря 2018

К сожалению, нет общего метода получения пикселей определенного окна, о котором я бы знал.В зависимости от того, как целевое приложение рисует себя, эта задача может быть очень простой или очень сложной.Если бы мы говорили о приложении, которое использует старый добрый GDI, вы могли бы просто получить HDC к окну через GetWindowDC () и BitBlt / StretchBlt содержимое переходит в собственное растровое изображение.

К сожалению, целевое приложение в вашем случае выглядит как игра.Игры обычно используют API-интерфейсы для трехмерной графики, такие как Direct3D или OpenGL для рисования.Предполагая, что вы не можете просто изменить целевое приложение, чтобы просто отправлять вам нужные данные по собственной воле, единственный способ специально записать выходные данные из таких приложений, о которых я знаю, - это подключиться к графическому API и захватитьданные из-под API.Это можно сделать.Однако внедрение такой системы довольно сложно.Могут существовать библиотеки, помогающие в написании таких приложений, но я не знаю ни одной, которую бы я мог порекомендовать здесь.Если вам не нужно захватывать игровой контент в режиме реального времени, вы можете просто использовать приложение для записи экрана, например, для записи видео, а затем использовать это видео в качестве входных данных для вашего алгоритма.Есть также инструменты отладки графики, такие как NSight Graphics или RenderDoc , которые вы можете использовать.Имейте в виду, что игры, особенно онлайн-игры, в наши дни часто имеют системы защиты от читов, которые могут очень рассердиться на вас, если вы попытаетесь подключиться к игре ...

Помимо всего этого, одним из альтернативных подходов может бытьиспользовать DXGI Output Duplication для захвата всего рабочего стола.Хотя вы не сможете настроить таргетинг на одно конкретное приложение (насколько я знаю), у него потенциально может быть несколько преимуществ: во-первых, его установка лишь умеренно сложна по сравнению с полноценным подходом на основе API-хуков,Во-вторых, он должен работать независимо от того, какой API использует целевое приложение, и даже если приложение находится в полноэкранном режиме.В-третьих, поскольку данные будут доставляться прямо из операционной системы, у вас не должно возникнуть проблем с защитой от читов.Вы можете использовать MonitorFromWindow () , чтобы получить монитор, на котором отображается ваше целевое окно, а затем перечислить все выходные данные всех адаптеров DXGI , чтобы найти тот, который соответствует этомуHMonitor ...

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