Я не розумію, в чому різниця між 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 Redraw полягає у відправленні лише замовлення на перемальовування (кілька байтів) через мережу.
З QImage він полягає у надсиланні цілого зображення (близько декількох МБ).
QPixmap
- це "об'єкт зображення", pixel
подання якого не має ніякого значення у вашому коді, тому QPixmap розроблений та оптимізований для відтворення зображень на екрані дисплея, він зберігається на XServer при використанні X11, отже малювання QPixmap на XWindow набагато швидше, ніж малювання QImages, оскільки дані вже є на сервері та готові до використання.
Коли використовувати QPixmap : Якщо ви просто хочете намалювати існуюче зображення (піктограма .. фон .. тощо) особливо неодноразово, тоді використовуйте QPixmap.
QImage - це "масив пікселів у пам'яті" клієнтського коду, QImage розроблений та оптимізований для вводу-виводу, а також для прямого доступу та маніпулювання пікселями.
Коли використовувати QImage : якщо ви хочете намалювати, за допомогою Qpaint або маніпулювати пікселями зображення.
QBitmap - це лише зручний підклас QPixmap, що забезпечує глибину 1, це його монохромна (1-бітова глибина) піксельна карта. Як і QPixmap, QBitmap оптимізований для використання неявного обміну даними.