2016-04-25 12 views
0

Für meine Anwendung wollte ich Bilder kontinuierlich anzeigen. Aber ich fand heraus, dass ich ungefähr 30ms brauchte, um qimage in qpixmap zu konvertieren. Dies hat sich auf meine Bildrate ausgewirkt, daher möchte ich eine effektivere Möglichkeit finden, mein Bild mit QtGui zu zeigen. Welche Methode kann ich verwenden? Könnte mir jemand helfen?QBild zu QPixmap ist teuer

Antwort

2

Wenn Sie die Dokumentation gut lesen, wird alles erklärt.

  • QImage ist Design für IO-Handling und zur direkten Pixel Zugriff und Manipulation
  • QPixmap entwickelt und optimiert für die Bilder auf dem Bildschirm

Wenn Sie nur Last Bild zeigt und es zeigen (ohne Bearbeiten Sie Ihr Bild und laden Sie es als QPixmap zwischen.

Aber wenn Sie die Manipulation machen, nicht viel, was Sie tun können. Vielleicht können Sie versuchen, das Bild direkt auf QPainter des Widgets zu malen. Ich weiß nicht, ob es schneller ist, als Bild in Pixmap umzuwandeln und es zum Widget zu malen.

+0

Vielen Dank für Ihre Beratung. Ich habe den Eindruck, dass das Zeichnen mit dem Maler langsamer ist, aber ich werde es versuchen – betterorbest

+0

Ja, das Zeichnen mit QImage mit Maler ist eigentlich langsamer als das Konvertieren in QPixmap und Zeichnen der Pixmap (getestet mit Qt 5.4). – Tomas

0

Ich war vor ein ähnliches Problem konfrontiert und die beste Lösung, die ich gefunden habe, ist eine OpenGL (QOpenGLWidget + glDrawPixels()) von QImageQPixmap zu konvertieren, anstatt zu verwenden.

+0

Vielen Dank. Ich werde diese Methode versuchen – betterorbest

0

Sie müssen die Konvertierung nicht durchführen. Stellen Sie sicher, dass das Bild im Format backing store und einfach drawImage auf dem Widget ist. Es ist so schnell wie möglich.

Mit dem Standard-Raster-Backend ist die QPixmap ein sehr dünner Wrapper um eine QImage. Solange das Bild das richtige Format hat, ist die Konvertierung ein No-Op.

das Format mit QPixmap kompatibel zu erhalten, können Sie den folgenden Code verwenden:

QImage::Format pixmapFormat() { 
    static auto format = QPixmap{1,1}.toImage().format(); 
    return format; 
}