Я не понимаю, в чем разница между QImage и QPixmap, похоже, они предлагают ту же функциональность. Когда мне следует использовать QImage, а когда - QPixmap?
Я не понимаю, в чем разница между QImage и QPixmap, похоже, они предлагают ту же функциональность. Когда мне следует использовать QImage, а когда - QPixmap?
Ответы:
Легко ответить, прочитав документацию по QImage и QPixmap :
Класс QPixmap - это представление изображения за пределами экрана, которое можно использовать в качестве устройства рисования.
Класс QImage обеспечивает аппаратно-независимое представление изображения, которое обеспечивает прямой доступ к данным пикселей и может использоваться в качестве устройства рисования.
Изменить: Кроме того, из ответа @Dave:
Вы не можете манипулировать QPixmap вне потока графического интерфейса пользователя, но QImage не имеет такого ограничения.
И от @Arnold:
Вот краткое изложение, которое обычно (не всегда) применимо:
- Если вы планируете манипулировать изображением, изменять его, изменять пиксели на нем и т. Д., Используйте QImage.
- Если вы планируете рисовать одно и то же изображение на экране более одного раза, преобразуйте его в QPixmap.
В Qt Labs есть хорошая серия статей, которые многое объясняют о графической системе Qt. В этой статье , в частности , имеет раздел QImage
VS. QPixmap
.
Вот краткое изложение, которое обычно (не всегда) применимо:
QImage
.QPixmap
.Одним из важных отличий является то, что вы не можете создавать или управлять QPixmap
чем-либо, кроме основного потока графического интерфейса. Однако вы можете создавать QImage
экземпляры и управлять ими в фоновых потоках, а затем преобразовывать их после передачи обратно в поток графического интерфейса.
Важно в промышленных условиях:
QPixmap хранится на видеокарте, выполняющей отображение. Не QImage.
Поэтому, если у вас есть сервер, на котором выполняется приложение, и клиентская станция, выполняющая отображение, это очень важно с точки зрения использования сети.
При использовании Pixmap перерисовка заключается в отправке по сети только команды на перерисовку (несколько байтов).
С QImage он заключается в отправке всего изображения (около нескольких МБ).
QPixmap
- это «объект изображения», pixel
представление которого не имеет значения в вашем коде. Таким образом, QPixmap разработан и оптимизирован для рендеринга изображений на экране дисплея, он хранится на XServer при использовании X11, поэтому рисование QPixmap в XWindow происходит намного быстрее, чем рисование. QImages, поскольку данные уже находятся на сервере и готовы к использованию.
Когда использовать QPixmap : Если вы просто хотите рисовать существующее изображение (значок ... фон ... и т.д.) особенно часто, то используйте QPixmap.
QImage - это «массив пикселей в памяти» клиентского кода, QImage разработан и оптимизирован для ввода-вывода, а также для прямого доступа к пикселям и манипулирования ими.
Когда использовать QImage : если вы хотите рисовать с помощью Qpaint или манипулировать пикселями изображения.
QBitmap - это всего лишь удобный подкласс QPixmap, обеспечивающий глубину 1, это монохромное (глубина 1 бит) растровое изображение. Как и QPixmap, QBitmap оптимизирован для использования неявного обмена данными.