GetPixel
медленно по двум причинам:
Поскольку вы опрашивает экран - каждый вызов GetPixel
приводит к транзакции к видеодрайвера, который, в свою очередь, принимает пиксель данные из видеопамяти.
В режиме контрастности с использованием GetPixel
на DIB намного быстрее.
Во всяком случае GetPixel
делает несколько вещей, включая координаты зажимное/преобразование и т.д.
Так что, если вы используете для запроса множество значений пикселей на один раз - вы должны попробовать это организовать в одном транзакция с драйвером GDI/видео.
Используя GDI, вы должны создать DIB соответствующего размера (см. CreateDIBSection
). После создания вам будет предоставлен прямой указатель на данные битов изображения. Затем скопируйте часть изображения на свой DIB (см. BitBlt
). Также не забудьте позвонить GdiFlush
, прежде чем вы действительно проверите содержимое DIB (так как видеодрайверы могут выполнять асинхронный чертеж).
Используя GD +, вы можете на самом деле сделать то же самое, с немного более простым синтаксисом.
Какое применение вам нужно? Возможно, стоит захватить регион на экране, а затем пробовать пиксели из этого. – hometoast
Мое приложение позволяет пользователю выбирать цвета в любом месте экрана (вне моего приложения) в реальном времени. +1 Хорошая идея об ограничении региона: я посмотрю, смогу ли я это сделать. – stucampbell