Nie rozumiem, jaka jest różnica między QImage i QPixmap, wydaje się, że oferują tę samą funkcjonalność. Kiedy należy używać QImage, a kiedy QPixmap?
Nie rozumiem, jaka jest różnica między QImage i QPixmap, wydaje się, że oferują tę samą funkcjonalność. Kiedy należy używać QImage, a kiedy QPixmap?
Odpowiedzi:
Łatwo odpowiedział, czytając dokumenty w QImage i QPixmap :
QPixmap klasa jest off-screen reprezentacja obrazu, który może być używany jako urządzenie do malowania.
QImage klasa zapewnia sprzętową niezależną reprezentację obrazu, która pozwala na bezpośredni dostęp do danych pikseli i może być używany jako urządzenie do malowania.
Edycja: Również z odpowiedzi @ Dave:
Nie możesz manipulować mapą QPixmap poza wątkiem GUI, ale QImage nie ma takiego ograniczenia.
A od @Arnold:
Oto krótkie podsumowanie, które zwykle (nie zawsze) ma zastosowanie:
- Jeśli planujesz manipulować obrazem, modyfikować go, zmieniać piksele itp., Użyj QImage.
- Jeśli planujesz narysować ten sam obraz na ekranie więcej niż raz, przekonwertuj go na QPixmap.
W Qt Labs jest fajna seria artykułów, które wiele wyjaśniają o systemie graficznym Qt. Ten artykuł ma zwłaszcza rozdział poświęcony QImage
vs. QPixmap
.
Oto krótkie podsumowanie, które zwykle (nie zawsze) ma zastosowanie:
QImage
.QPixmap
.Jedną ważną różnicą jest to, że nie można tworzyć ani modyfikować QPixmap
niczego poza głównym wątkiem GUI. Można jednak tworzyć QImage
instancje w wątkach w tle i manipulować nimi, a następnie konwertować je po przekazaniu z powrotem do wątku GUI.
Ważne w środowiskach przemysłowych:
QPixmap jest przechowywana na karcie graficznej wykonującej wyświetlanie. Nie QImage.
Więc jeśli masz serwer z uruchomioną aplikacją i stację kliencką wykonującą wyświetlanie, jest to bardzo istotne z punktu widzenia wykorzystania sieci.
W przypadku Pixmapy przerysowanie polega na wysłaniu przez sieć tylko polecenia przerysowania (kilka bajtów).
W przypadku QImage polega na przesłaniu całego obrazu (około kilku MB).
QPixmap
jest "obiektem obrazu", którego pixel
reprezentacja nie ma żadnego znaczenia w kodzie. Dlatego QPixmap jest zaprojektowany i zoptymalizowany do renderowania obrazów na ekranie, jest przechowywany na serwerze XServer podczas używania X11, dzięki czemu rysowanie QPixmap w XWindow jest znacznie szybsze niż rysowanie QImages, ponieważ dane są już na serwerze i gotowe do użycia.
Kiedy używać QPixmap : Jeśli chcesz tylko wielokrotnie rysować istniejący obraz (ikona… tło… itd.), Użyj QPixmap.
QImage to „tablica pikseli w pamięci” kodu klienta. QImage została zaprojektowana i zoptymalizowana pod kątem operacji we / wy oraz bezpośredniego dostępu do pikseli i manipulowania nimi.
Kiedy używać QImage : Jeśli chcesz rysować za pomocą Qpaint lub manipulować pikselami obrazu.
QBitmap to tylko wygodna podklasa QPixmap zapewniająca głębię 1, jest to monochromatyczna (1-bitowa głębia) pixmapa. Podobnie jak QPixmap, QBitmap jest zoptymalizowany pod kątem niejawnego udostępniania danych.