Как я могу заменить GetPixel()
чем-то быстрее?
В настоящее время я использую:
temp = GetPixel(hMonitor, 1, 1);
if (pixelArray[0] != temp)
{
pixelArray[0] = temp;
counter++;
}
Выше код - просто упрощенный пример.
Это содержится в цикле for для всех пикселей на дисплее. Он сравнивает один пиксель (темп) с предыдущим пикселем массива (pixelArray). Если он изменился, замените его. Однако я нахожу, что использование GetPixel() для каждого пикселя на дисплее занимает много времени.
Я читал другие вопросы подобного характера, такие как:
... но я не уверен, какой метод лучше, например GDI или DirectX, и как я буду реализовывать указанные методы.
Обновление: Windows GDI (используя GetObject) для массива пикселей - вот что мне нужно, спасибо. Это намного быстрее, чем GetPixel().
Я бы предложил вам получить указатель на данные пикселя растрового изображения (если у вас есть дескриптор HBITMAP).
Это делается через GetObject(), который должен вернуть вам структуру BITMAP. Это поле, в котором вы заинтересованы:
bmBits: указатель на расположение битовых значений для растрового изображения. Член bmBits должен быть указателем на массив значений символов (1 байт).
Затем вы можете запустить свою логику проверки на пиксель на буферах. Это будет быстрее с использованием GetPixel.
GetPixel
так что выбирайтеGetPixel
.