В чем разница между QImage и QPixmap?


Я не понимаю, в чем разница между QImage и QPixmap, они, кажется, предлагают ту же функциональность. Когда я должен использовать QImage и когда я должен использовать QPixmap?

5 60

5 ответов:

легко ответил, прочитав документы на QImage и QPixmap:

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

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

Edit: также, из ответа @Dave:

вы не можете манипулировать QPixmap вне GUI-thread, но QImage не имеет такого ограничения.

и от @Arnold:

вот краткое резюме, которое обычно (не всегда) применяется:

  • если вы планируете манипулировать изображением, измените его, измените пиксели на нем, так далее. использовать QImage.
  • если вы планируете рисовать одно и то же изображение более одного раза на экране, преобразовать его в QPixmap.

в Qt Labs есть хорошая серия статей, которая многое объясняет о графической системе Qt. в этой статье в частности, есть раздел о QImage и QPixmap.

вот краткое резюме, которое обычно (не всегда) применяется:

  • если вы планируете манипулировать изображением, изменять его, изменять пиксели на нем и т. д. используйте QImage.
  • если вы планируете нарисовать одно и то же изображение более одного раза на экране, преобразуйте его в QPixmap.

одно важное отличие заключается в том, что вы не можете создавать или манипулировать QPixmap на все, кроме основного потока GUI. Однако вы можете создавать и манипулировать QImage экземпляры в фоновых потоках, а затем преобразовать их после передачи их обратно в поток GUI.

важно в промышленной среде:

QPixmap хранится на видеокарте, выполняющей отображение. Не QImage.

поэтому, если у вас есть сервер, на котором работает приложение, и клиентская станция, выполняющая отображение, это очень важно с точки зрения использования сети.

с помощью пиксельной карты перерисовка состоит в отправке по сети только заказа на перерисовку (несколько октетов). Он заключается в отправке всего изображения с QImage (несколько месяцев ? ...)

  • QPixmap это "объект изображения", чей pixel представление не имеет никакого значения в вашем коде, поэтому QPixmap-это разработан и оптимизирован для рендеринга изображений на экране дисплея он хранится на XServer при использовании X11, поэтому рисование QPixmap на XWindow является быстрее чем рисование QImages, так как данные уже находятся на сервере и готовы к использованию.

    когда использовать QPixmap: если вы просто хотите нарисовать существующее изображение (значок .. фон.. и т. д.) Особенно несколько раз, а затем использовать QPixmap.

  • QImage - это "массив пикселей в памяти"клиент код, QImage конструирован и оптимизирован для I/O, и для сразу доступа и манипуляции пиксела.

    когда использовать QImage: если вы хотите рисовать, с помощью Qpaint или манипулировать изображением пикселы.

  • QBitmap это только удобный подкласс QPixmap, обеспечивающий глубину 1, его монохромное (1-битная глубина) пиксельное изображение. Как и QPixmap , QBitmap оптимизирован для использования неявного обмена данными.

  • QPicture Это устройство рисования, которое записывает и воспроизводит команды QPainter -- ваш рисунок--