Nie jestem pewien, czy rozumiem Twoje pytanie, ale pomyślałem, że w dokumentacji było to całkiem jasne: „QImage jest zaprojektowany i zoptymalizowany pod kątem operacji wejścia / wyjścia oraz bezpośredniego dostępu do pikseli i manipulacji nimi, podczas gdy QPixmap jest zaprojektowany i zoptymalizowany pod kątem wyświetlania obrazów na ekranie." doc.qt.nokia.com/latest/qpixmap.html#details
cgmb
1
Tak! dowiedziałem się, ale nie rozumiem dobrze, na przykład zoptymalizowany pod kątem I / O i zoptymalizowany do wyświetlania, czy różnica jest pokazana na platformie różnicy? ..Czy możesz mi pomóc zrobić krok do wyjaśnienia .. dziękuję ..
Pan Tu
Nadal nie jestem w 100% pewien, czy wiem, co masz na myśli, ale jeśli używasz QWidgets, możesz wyświetlić go w QLabel. Jeśli używasz QGraphicsView, możesz wyświetlić go w QGraphicsPixmapItem. Jeśli używasz QML, element Image załatwi wszystko za Ciebie.
cgmb
Powiem inaczej, czym jest silnik, na czym polega jego praca? kiedy go używać?
Pan Tu
Odpowiedzi:
55
Ł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:
dzięki za pomoc ... jaki jest ogólny proces ładowania obrazu przez QPixmpa i QImage ... co jest w pamięci ... dziękuję ...
Mr.Tu
Nie jestem pewien, co próbujesz zrobić, ale w tym pytaniu pokazuję, jak załadować dane YV12 z dysku, przekonwertować na RGB za pomocą shadera fragmentów GLSL, a następnie wyświetlić je na ekranie w QImage. Myślę, że mógłbym wskazać ci właściwy kierunek, gdybyś miał większą jasność co do tego, co próbujesz osiągnąć.
karlphillip
14
Czy to naprawdę coś odpowiada?
spinkus
7
Samo kopiowanie dokumentacji i odpowiedzi innych osób nie ma sensu.
Viacheslav Kroilov
48
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 QImagevs. QPixmap.
Oto krótkie podsumowanie, które zwykle (nie zawsze) ma zastosowanie:
Dziękuję Ci. Ten fragment mówi nam: są dwa różne sposoby ładowania obrazu: raster i OpenGL? jest w porządku?
Pan Tu
Nie do końca rozumiem pytanie. Ani „raster”, ani „OpenGL” nie reprezentują konkretnie sposobów ładowania obrazu.
Arnold Spence,
37
Jedną ważną różnicą jest to, że nie można tworzyć ani modyfikować QPixmapniczego poza głównym wątkiem GUI. Można jednak tworzyć QImageinstancje w wątkach w tle i manipulować nimi, a następnie konwertować je po przekazaniu z powrotem do wątku GUI.
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 pixelreprezentacja 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.
QPicture to urządzenie do malowania, które rejestruje i odtwarza polecenia QPainter - rysunek -
Odpowiedzi:
Łatwo odpowiedział, czytając dokumenty w QImage i QPixmap :
Edycja: Również z odpowiedzi @ Dave:
A od @Arnold:
źródło
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
.źródło
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.źródło
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).
źródło
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.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.
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.
źródło