У чому різниця між QImage та QPixmap?


84

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


Я не впевнений, чи розумію ваше запитання, але я вважав, що це досить чітко видно з документації: "QImage розроблений та оптимізований для вводу-виводу, а також для прямого доступу та маніпуляцій пікселями, тоді як QPixmap розроблений та оптимізований для показу зображень на екрані." doc.qt.nokia.com/latest/qpixmap.html#details
cgmb

1
так! я це дізнався, але погано розумію, наприклад, оптимізований для вводу-виводу та оптимізований для показу, це різниця, яку picutre показав на платформі різниці? ..Чи можете ви допомогти мені зробити крок, щоб пояснити .. дякую ..
Mr.Tu

Я все ще не впевнений на 100%, що знаю, що ви маєте на увазі, але якщо ви використовуєте QWidgets, ви можете відобразити це в QLabel. Якщо ви використовуєте QGraphicsView, ви можете відобразити його в QGraphicsPixmapItem. Якщо ви використовуєте QML, елемент Image обробляє все за вас.
cgmb

Дозвольте сказати по-іншому, що таке Двигун, яка його робота? коли його використовувати?
Mr.Tu

Відповіді:


55

Легко відповісти, прочитавши документи на QImage та QPixmap :

Клас QPixmap - це зображення поза екраном, яке можна використовувати як пристрій для малювання.

Клас QImage забезпечує незалежне від апаратного забезпечення зображення, що забезпечує прямий доступ до піксельних даних і може використовуватися як пристрій для малювання.

Редагувати: Також із відповіді @ Dave:

Ви не можете маніпулювати QPixmap поза графічним інтерфейсом, але QImage не має такого обмеження.

І від @Arnold:

Ось короткий підсумок, який зазвичай (не завжди) застосовується:

  • Якщо ви плануєте маніпулювати зображенням, модифікувати його, змінювати пікселі на ньому тощо, використовуйте QImage.
  • Якщо ви плануєте намалювати одне і те ж зображення кілька разів на екрані, перетворіть його на QPixmap.

спасибі за допомогу ... що таке загальний процес, за яким QPixmpa та QImage завантажують зображення .. що це в пам'яті .. дякую ..
Mr.Tu

Я не впевнений, що ви намагаєтесь зробити, але в цьому питанні я демонструю, як завантажувати дані YV12 з диска, конвертувати в RGB за допомогою шейдера фрагментів GLSL, а потім відображати їх на екрані всередині QImage. Думаю, я міг би спрямувати вас у правильному напрямку, якби ви були більш чітко зрозуміли, чого намагаєтесь досягти.
karlphillip

14
Це насправді щось відповідає?
spinkus

7
Просто копіювати документацію та відповіді інших не має сенсу.
Вячеслав Кройлов

48

У Qt Labs є чудова серія статей, яка багато пояснює про графічну систему Qt. У цій статті , зокрема , має розділ QImageVS. QPixmap.

Ось короткий підсумок, який зазвичай (не завжди) застосовується:

  • Якщо ви плануєте маніпулювати зображенням, модифікувати його, змінювати пікселі на ньому тощо, використовуйте a QImage.
  • Якщо ви плануєте намалювати одне і те ж зображення кілька разів на екрані, перетворіть його у формат QPixmap.

Дякую. Цей уривок каже нам: є два різні способи завантаження зображення, растру та OpenGL? правильно?
Mr.Tu

Я не зовсім розумію питання. Ні "растр", ні "OpenGL" спеціально не представляють способи завантаження зображення.
Арнольд Спенс

37

Одна важлива відмінність полягає в тому, що ви не можете створити або маніпулювати ним QPixmapні на чому, крім основного потоку графічного інтерфейсу. Однак ви можете створювати та обробляти QImageекземпляри у фонових потоках, а потім перетворювати їх, повертаючи їх назад у графічний інтерфейс.


22

Важливо в промислових умовах:

QPixmap зберігається на відеокарті, що робить дисплей. Не QImage.

Отже, якщо у вас є сервер, на якому запущена програма, і клієнтська станція, яка здійснює показ, це дуже важливо з точки зору використання мережі.

За допомогою Pixmap Redraw полягає у відправленні лише замовлення на перемальовування (кілька байтів) через мережу.

З QImage він полягає у надсиланні цілого зображення (близько декількох МБ).


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

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

  • QImage - це "масив пікселів у пам'яті" клієнтського коду, QImage розроблений та оптимізований для вводу-виводу, а також для прямого доступу та маніпулювання пікселями.

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

  • QBitmap - це лише зручний підклас QPixmap, що забезпечує глибину 1, це його монохромна (1-бітова глибина) піксельна карта. Як і QPixmap, QBitmap оптимізований для використання неявного обміну даними.

  • QPicture - це пристрій для малювання, яке записує та повторює команди QPainter - ваш малюнок -
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.