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

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

5 ответов


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

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

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

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

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

и от @Arnold:

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

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

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

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

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

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


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

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

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

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


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

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

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

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

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

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