Qt. Schnellste Möglichkeit 1024x1024 Punkte auf dem Bildschirm zu zeichnen

8

Ich entwickle ein Programm, das eine Farbe jedes Punktes auf einem 1024x1024 Bild mit einem speziellen Algorithmus berechnen muss. Die Farbe eines Punktes repräsentiert einen Wert. So ist jeder Punkt unabhängig von anderen Punkten und muss separat gezeichnet werden. Ich muss das Bild nicht zu oft aktualisieren. Eigentlich muss ich es nur einmal anzeigen.

Was ist der schnellste Ansatz zum Zeichnen separater Pixel in Qt?

Kann ich irgendeine Art von "Bildschirmspeicher" bekommen und das ganze Bild als ein Array von 4-Byte-Sätzen schreiben, die jedes Pixel als 4 Bytes in diesem Speicher darstellen?

    
pavelkolodin 09.01.2012, 15:32
quelle

3 Antworten

7

Die Klasse QImage ist für die Pixelbearbeitung optimiert. Sie können eine Instanz mit der erforderlichen Größe instanziieren und dann entweder die einzelnen Pixel setPixel festlegen oder auf die Rohdaten zugreifen und sie über bits() an Ort und Stelle manipulieren. Stellen Sie sicher, dass Sie das korrekte Format verwenden (z. B. RGBA-Werte oder Farbindizes für 8-Bit-Bilder)

    
king_nak 09.01.2012, 15:55
quelle
6

Die schnellste Lösung könnte darin bestehen, ein QImage zu erstellen, zu manipulieren ( setze die Pixel) und lass Qt dann zeichnen.

Die QImage-Klasse ist für schnelles IO, aus dem Handbuch:

  

Die QImage-Klasse bietet eine hardwareunabhängige Bilddarstellung, die direkten Zugriff auf die Pixeldaten ermöglicht und als Malwerkzeug verwendet werden kann.

     

Die QImage-Klasse unterstützt mehrere Bildformate, die in der Formataufzählung beschrieben werden. Dazu gehören monochrome, 8-Bit-, 32-Bit- und Alpha-Blended-Bilder, die in allen Versionen von Qt 4.x verfügbar sind.

Informationen zur Pixelbearbeitung finden Sie im Abschnitt Detaillierte Beschreibung.

Um es anzuzeigen, wäre es am einfachsten, es in eine Pixmap mit QPixmap::fromImage umzuwandeln und es dann in ein Label mit QLabel::setPixmap zu setzen.

Für mehr Kontrolle könnten Sie QWidget unterteilen, paintEvent überladen und QImage mit QPainter mit QPainter::drawImage zeichnen.

    
Silas Parker 09.01.2012 15:54
quelle
2

Sie könnten versuchen, ein OpenGL-Widget und das glDrawPixels Funktion.

    
tibur 09.01.2012 15:55
quelle

Tags und Links