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