любой быстрый и простой способ захватить часть экрана? getPixel был медленным, и GetDIBits казались немного сложными в начале - PullRequest
0 голосов
/ 13 мая 2009

Я пытался написать код для захвата части экрана, используя getPixel в Windows, с контекстом устройства, равным нулю (для захвата экрана вместо окна), но это было очень медленно. Кажется, что GetDIBits () может быть быстрым, но кажется немного сложным ... Интересно, есть ли библиотека, которая может поместить весь регион в массив, и pixel [x] [y] вернет 24-битный цвет код пикселя?

Или такая библиотека существует на Mac? Или если в Ruby или Python уже есть такая библиотека, которая может это сделать?

1 Ответ

3 голосов
/ 05 июня 2009

Я никогда не делал этого, но я бы попробовал:

  1. Создать контекст устройства памяти (DC) используя CreateCompatibleDC, передавая его Контекст устройства рабочего стола (GetDC (NULL)).

  2. Создание растрового изображения (используя CreateCompatibleBitmap) то же самое размер как регион вашей съемки.

  3. Выберите растровое изображение в DC, который вы создан (используя SelectObject).

  4. Сделать битблт из DC рабочего стола к созданному вами DC (с использованием флага SRCCOPY).

Работа с контекстами устройства может вызвать утечку GDI, если вы делаете вещи в неправильном порядке, поэтому обязательно прочитайте документацию по всем используемым функциям GDI (например, SelectObject, GetDC и т.

...