Was ist der Unterschied zwischen QImage und QPixmap?
83
Ich verstehe nicht, was der Unterschied zwischen QImage und QPixmap ist, sie scheinen die gleiche Funktionalität zu bieten. Wann sollte ich ein QImage verwenden und wann sollte ich eine QPixmap verwenden?
Ich bin mir nicht sicher, ob ich Ihre Frage verstehe, aber ich dachte, dass dies in der Dokumentation ziemlich klar war: "QImage wurde für E / A sowie für den direkten Pixelzugriff und die Manipulation entwickelt und optimiert, während QPixmap für die Anzeige von Bildern entwickelt und optimiert wurde auf dem Bildschirm." doc.qt.nokia.com/latest/qpixmap.html#details
cgmb
1
Ja! Ich hatte es herausgefunden, aber nicht gut verstanden, zum Beispiel für E / A optimiert und für das Anzeigen optimiert. Ist es ein Unterschied, den ein Bild auf einer Differenzplattform zeigt? ..Kannst du mir helfen, einen Schritt zu erklären .. Danke ..
Mr.Tu
Ich bin mir immer noch nicht 100% sicher, ob ich weiß, was Sie meinen, aber wenn Sie QWidgets verwenden, können Sie es in einem QLabel anzeigen. Wenn Sie QGraphicsView verwenden, können Sie es in einem QGraphicsPixmapItem anzeigen. Wenn Sie QML verwenden, übernimmt das Image-Element alles für Sie.
CGMB
Lassen Sie es mich anders sagen, was ist der Motor, was ist seine Arbeit? wann man es benutzt?
Mr.Tu
Antworten:
54
Einfach beantwortet durch Lesen der Dokumente auf QImage und QPixmap :
Die QPixmap- Klasse ist eine Off-Screen- Bilddarstellung, die als Malgerät verwendet werden kann.
Die QImage- Klasse bietet eine hardwareunabhängige Bilddarstellung, die den direkten Zugriff auf die Pixeldaten ermöglicht und als Malgerät verwendet werden kann.
Bearbeiten: Auch aus @ Daves Antwort:
Sie können eine QPixmap nicht außerhalb des GUI-Threads bearbeiten, aber QImage unterliegt keiner solchen Einschränkung.
Und von @Arnold:
Hier ist eine kurze Zusammenfassung, die normalerweise (nicht immer) gilt:
Wenn Sie ein Bild bearbeiten, ändern, Pixel ändern usw. möchten, verwenden Sie ein QImage.
Wenn Sie dasselbe Bild mehrmals auf dem Bildschirm zeichnen möchten, konvertieren Sie es in eine QPixmap.
Vielen Dank für Ihre Hilfe ... Was ist der allgemeine Prozess, dass QPixmpa und QImage ein Bild laden .. Was ist es im Speicher .. Danke ..
Mr.Tu
Ich bin nicht sicher, was Sie versuchen, aber in dieser Frage zeige ich, wie Sie YV12-Daten von der Festplatte laden, mit einem GLSL-Fragment-Shader in RGB konvertieren und sie dann in einem QImage auf dem Bildschirm anzeigen. Ich denke, ich könnte Sie in die richtige Richtung weisen, wenn Sie klarer wären, was Sie erreichen wollen.
Karlphillip
14
Beantwortet dies wirklich etwas?
Spinkus
7
Nur die Dokumentation und die Antworten anderer zu kopieren, macht keinen Sinn.
Viacheslav Kroilov
48
Es gibt eine schöne Artikelserie bei Qt Labs, die viel über das Qt-Grafiksystem erklärt. Dieser Artikel weist insbesondere einen Abschnitt über QImagevs. QPixmap.
Hier ist eine kurze Zusammenfassung, die normalerweise (nicht immer) gilt:
Wenn Sie ein Bild bearbeiten, ändern, Pixel ändern usw. verwenden möchten, verwenden Sie a QImage.
Wenn Sie dasselbe Bild mehrmals auf dem Bildschirm zeichnen möchten, konvertieren Sie es in a QPixmap.
Vielen Dank. Diese Passage sagt uns: Es gibt zwei verschiedene Möglichkeiten, ein Bild zu laden, Raster und OpenGL? ist richtig?
Mr.Tu
Ich verstehe die Frage nicht ganz. Weder "Raster" noch "OpenGL" stellen speziell Möglichkeiten zum Laden eines Bildes dar.
Arnold Spence
37
Ein wichtiger Unterschied besteht darin, dass Sie QPixmapnur für den Haupt-GUI-Thread einen erstellen oder bearbeiten können. Sie können jedoch QImageInstanzen in Hintergrundthreads erstellen und bearbeiten und diese dann konvertieren, nachdem Sie sie an den GUI-Thread zurückgegeben haben.
Die QPixmap wird auf der Grafikkarte gespeichert, die die Anzeige übernimmt. Nicht das QImage.
Wenn auf einem Server die Anwendung ausgeführt wird und eine Client-Station die Anzeige ausführt, ist dies für die Netzwerknutzung von großer Bedeutung.
Bei einer Pixmap besteht ein Neuzeichnen darin, nur den Befehl zum Neuzeichnen (einige Bytes) über das Netzwerk zu senden.
Bei einem QImage besteht es darin, das gesamte Bild zu senden (ca. einige MB).
QPixmap
ist ein "Bildobjekt", dessen pixelDarstellung in Ihrem Code keine Rolle spielt. Daher ist QPixmap für das Rendern von Bildern auf dem Bildschirm konzipiert und optimiert. Es wird auf dem XServer gespeichert, wenn X11 verwendet wird. Das Zeichnen von QPixmap auf XWindow ist also viel schneller als das Zeichnen QBilder, da sich die Daten bereits auf dem Server befinden und einsatzbereit sind.
Verwendung von QPixmap : Wenn Sie nur ein vorhandenes Bild (Symbol .. Hintergrund .. usw.) besonders wiederholt zeichnen möchten, verwenden Sie QPixmap.
QImage ist ein "Array von Pixeln im Speicher" des Client- Codes. QImage wurde für E / A sowie für direkten Pixelzugriff und -manipulation entwickelt und optimiert.
Verwendung von QImage : Wenn Sie mit Qpaint zeichnen oder Bildpixel bearbeiten möchten.
QBitmap ist nur eine praktische QPixmap-Unterklasse, die eine Tiefe von 1 gewährleistet. Es handelt sich um eine monochrome Pixmap (1-Bit-Tiefe). Genau wie QPixmap ist QBitmap für die Verwendung des impliziten Datenaustauschs optimiert.
QPicture ist ein Malgerät , das QPainter-Befehle aufzeichnet und wiedergibt - Ihre Zeichnung -
Antworten:
Einfach beantwortet durch Lesen der Dokumente auf QImage und QPixmap :
Bearbeiten: Auch aus @ Daves Antwort:
Und von @Arnold:
quelle
Es gibt eine schöne Artikelserie bei Qt Labs, die viel über das Qt-Grafiksystem erklärt. Dieser Artikel weist insbesondere einen Abschnitt über
QImage
vs.QPixmap
.Hier ist eine kurze Zusammenfassung, die normalerweise (nicht immer) gilt:
QImage
.QPixmap
.quelle
Ein wichtiger Unterschied besteht darin, dass Sie
QPixmap
nur für den Haupt-GUI-Thread einen erstellen oder bearbeiten können. Sie können jedochQImage
Instanzen in Hintergrundthreads erstellen und bearbeiten und diese dann konvertieren, nachdem Sie sie an den GUI-Thread zurückgegeben haben.quelle
Wichtig in industriellen Umgebungen:
Die QPixmap wird auf der Grafikkarte gespeichert, die die Anzeige übernimmt. Nicht das QImage.
Wenn auf einem Server die Anwendung ausgeführt wird und eine Client-Station die Anzeige ausführt, ist dies für die Netzwerknutzung von großer Bedeutung.
Bei einer Pixmap besteht ein Neuzeichnen darin, nur den Befehl zum Neuzeichnen (einige Bytes) über das Netzwerk zu senden.
Bei einem QImage besteht es darin, das gesamte Bild zu senden (ca. einige MB).
quelle
QPixmap ist ein "Bildobjekt", dessen
pixel
Darstellung in Ihrem Code keine Rolle spielt. Daher ist QPixmap für das Rendern von Bildern auf dem Bildschirm konzipiert und optimiert. Es wird auf dem XServer gespeichert, wenn X11 verwendet wird. Das Zeichnen von QPixmap auf XWindow ist also viel schneller als das Zeichnen QBilder, da sich die Daten bereits auf dem Server befinden und einsatzbereit sind.QImage ist ein "Array von Pixeln im Speicher" des Client- Codes. QImage wurde für E / A sowie für direkten Pixelzugriff und -manipulation entwickelt und optimiert.
QBitmap ist nur eine praktische QPixmap-Unterklasse, die eine Tiefe von 1 gewährleistet. Es handelt sich um eine monochrome Pixmap (1-Bit-Tiefe). Genau wie QPixmap ist QBitmap für die Verwendung des impliziten Datenaustauschs optimiert.
quelle