есть ли быстрый и простой способ захватить часть экрана?getPixel работал медленно, а GetDIBits поначалу казался немного сложным.

StackOverflow https://stackoverflow.com/questions/859181

Вопрос

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

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

Это было полезно?

Решение

Я никогда этого не делал, но попробую:

  1. Создайте контекст устройства памяти (DC), используя CreateCompatibledc, передавая его контекст устройства настольного компьютера (getDC (null)).

  2. Создайте растровую карту (используя Create -CompatibleBitmap) того же размера, что и область, которую ваш захват.

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

  4. Сделайте Bitblt от DC -DC до созданного вами DC (используя флаг SRCCOPY).

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top