Быстрее, чем GetPixel ()?

0

Как я могу заменить GetPixel() чем-то быстрее?

В настоящее время я использую:

temp = GetPixel(hMonitor, 1, 1);
if (pixelArray[0] != temp)
{
    pixelArray[0] = temp;
    counter++;
}

Выше код - просто упрощенный пример.

Это содержится в цикле for для всех пикселей на дисплее. Он сравнивает один пиксель (темп) с предыдущим пикселем массива (pixelArray). Если он изменился, замените его. Однако я нахожу, что использование GetPixel() для каждого пикселя на дисплее занимает много времени.

Я читал другие вопросы подобного характера, такие как:

Самый быстрый способ захвата экрана

Получите пиксельный цвет быстрее всего?

... но я не уверен, какой метод лучше, например GDI или DirectX, и как я буду реализовывать указанные методы.

Обновление: Windows GDI (используя GetObject) для массива пикселей - вот что мне нужно, спасибо. Это намного быстрее, чем GetPixel().

  • 0
    карандаш, бумага и увеличительное стекло более эффективны, чем GetPixel так что выбирайте GetPixel .
  • 0
    Как я могу реализовать это в моем текущем коде?
Показать ещё 5 комментариев
Теги:
directx
gdi

1 ответ

1
Лучший ответ

Я бы предложил вам получить указатель на данные пикселя растрового изображения (если у вас есть дескриптор HBITMAP).

Это делается через GetObject(), который должен вернуть вам структуру BITMAP. Это поле, в котором вы заинтересованы:

bmBits: указатель на расположение битовых значений для растрового изображения. Член bmBits должен быть указателем на массив значений символов (1 байт).

Затем вы можете запустить свою логику проверки на пиксель на буферах. Это будет быстрее с использованием GetPixel.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню