Qt. Самый быстрый способ рисовать 1024x1024 точек на экране - PullRequest
8 голосов
/ 09 января 2012

Я разрабатываю программу, которая должна рассчитывать цвет каждой точки на изображении 1024x1024, используя специальный алгоритм. Цвет точки представляет некоторую ценность. Таким образом, каждая точка не зависит от других точек и должна быть нарисована отдельно. Мне не нужно обновлять картинку слишком часто. На самом деле, мне нужно отобразить его только один раз.

Какой самый быстрый подход к рисованию отдельных пикселей в Qt?

Могу ли я получить какую-то "экранную память" и записать всю картинку в виде массива 4-байтовых наборов, представляющих каждый пиксель в виде 4 байтов в этой памяти?

Ответы [ 3 ]

8 голосов
/ 09 января 2012

Класс QImage оптимизирован для манипулирования пикселями. Вы можете создать экземпляр с требуемым размером, а затем либо установить отдельные пиксели setPixel, либо получить доступ к необработанным данным и манипулировать ими на месте с помощью bits(). Просто убедитесь, что вы используете правильный формат (например, значения RGBA или индексы цвета для 8-битных изображений)

6 голосов
/ 09 января 2012

Самым быстрым решением может быть создание QImage, манипулирование им (установка пикселей) и получение Qt для его рисования.

Класс QImage предназначен для быстрого ввода-вывода,из руководства:

Класс QImage предоставляет аппаратно-независимое представление изображения, которое обеспечивает прямой доступ к данным пикселей, и может использоваться в качестве устройства рисования.

Класс QImageподдерживает несколько форматов изображений, описанных в перечислении Format.К ним относятся монохромные, 8-битные, 32-битные и альфа-смешанные изображения, которые доступны во всех версиях Qt 4.x.

Информация о манипулировании пикселями приведена в разделе «Подробное описание».

Чтобы отобразить его, простейшим способом было бы преобразовать его в растровое изображение с QPixmap::fromImage, а затем поместить его в метку с QLabel::setPixmap.

. Для большего контроля вы можете создать подклассQWidget, перегрузите paintEvent и нарисуйте QImage с QPainter с QPainter::drawImage.

2 голосов
/ 09 января 2012

Вы можете попробовать использовать OpenGL виджет и функцию glDrawPixels .

...