Считывайте цвет пикселей с помощью Bitblt быстрееC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Считывайте цвет пикселей с помощью Bitblt быстрее

Сообщение Anonymous »

Я работаю над проектом, в котором мне нужно прочитать цвет пикселя на экране с помощью CreateCompatibleBitmap и Bitblt. К сожалению, этот метод довольно медленный, время цикла составляет от 60 до 100 мс. Я использую этот код:

Код: Выделить всё

HDC hdc = GetDC(NULL), hdcMem = CreateCompatibleDC(hdc);
HBITMAP hBitmap = CreateCompatibleBitmap(hdc, ScreenX, ScreenY);
BITMAPINFOHEADER bmi = { 0 };
bmi.biSize = sizeof(BITMAPINFOHEADER);
bmi.biPlanes = 1;
bmi.biBitCount = 24;
bmi.biWidth = ScreenX;
bmi.biHeight = -ScreenY;
bmi.biCompression = BI_RGB;
SelectObject(hdcMem, hBitmap);
BitBlt(hdcMem, 0, 0, ScreenX, ScreenY, hdc, 0, 0, SRCCOPY);
GetDIBits(hdc, hBitmap, 0, ScreenY, ScreenData, (BITMAPINFO*)&bmi, DIB_RGB_COLORS);
DeleteObject(hBitmap);
DeleteDC(hdcMem);
ReleaseDC(NULL, hdc);
Большая часть времени (95%) тратится на функцию Bitblt. Я читал, что это занимает так много времени, потому что Bitblt должен конвертировать цветовые форматы, но я не понимаю, как этого избежать...
Я использую Windows 11, и разрешение моего экрана — FHD 1920x1080.
Есть предложения, как можно ускорить работу программы?

Подробнее здесь: https://stackoverflow.com/questions/741 ... blt-faster
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»