Wie man ein QImage oder QPixmap-semi-transparent - oder warum ist setAlphaChannel veraltet?
4,7 und wie überlagern Sie zwei Bilder auf einen qgraphicsview. Das Bild oben ist semi-transparent, um zu ermöglichen, durch Sie sehen. Zunächst werden die beiden Bilder sind komplett undurchsichtig. Ich erwartete eine Funktion für die Einstellung eines globalen alpha-Wert für jedes pixel vorhanden ist, aber wie es scheint, gibt es keine solche Funktion. Die nächste Sache ist QPixmap::setAlphaChannel(const QPixmap & alphaChannel), die jedoch als veraltet markiert, da die Qt-4.6. Statt das Handbuch bezieht sich auf die CompositionModes von QPainter, aber ich glaube nicht gelingt, Transparenz hinzufügen, ein undurchsichtiges Bild, wie ich es will.
Könnte jemand mir ein Beispiel oder einige code?
Edit:
Ich bin fast Leid dafür, dass eine eigene Antwort, jetzt nur wenige Stunden nachdem die Frage.
Aus diesem Artikel ich herausgefunden, dass der folgende code macht den job. Ich Frage mich nur ob das als "besser" (oft übersetzt, um schneller) als änderung der alpha-Werte pixelwise.
QPainter p;
p.begin(image);
p.setCompositionMode(QPainter::CompositionMode_DestinationIn);
p.fillRect(image->rect(), QColor(0, 0, 0, 120));
p.end();
mpGraphicsView->scene()->addPixmap(QPixmap::fromImage(image->mirrored(false,true),0));
InformationsquelleAutor FFox | 2010-11-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Qt Zusammensetzung demo kann ein bisschen einschüchternd, weil Sie versuchen zu zeigen, ist alles aus. Hoffentlich wird die demo plus die QPainter-Dokumentation ist hilfreich für Sie. Sie verwenden möchten CompositionMode::SourceOver und stellen Sie sicher, dass die Bilder konvertiert werden, ARGB32 (integriert). Aus der Dokumentation:
When the paint device is a QImage, the image format must be set to Format_ARGB32Premultiplied or Format_ARGB32 for the composition modes to have any effect. For performance the premultiplied version is the preferred format.
InformationsquelleAutor bjoernz
Verwenden Sie Ihre Maler-Objekt und stellen Sie die Deckkraft.
InformationsquelleAutor Darkn3ss
Zunächst alle, für die internen Operationen auf Bildern, oft müssen Sie mit QImage statt QPixmap, wie der direkte Zugriff auf die Funktionalität zu QPixmap ist eingeschränkt. Grund dafür ist, dass QPixmaps gespeichert sind, auf die rendering-Gerät, z.B. pixmap auf dem X-server oder GL-textur. Auf der anderen Seite gehen von QPixmap zu QImage und zurück ist teuer, wie es führt oft zu kopieren aus dem Grafikkartenspeicher in den Hauptspeicher und zurück.
Als ich sehen es, Sie eine operation benötigen, die ändert sich nur der alpha-Wert des pixels, so dass Ihre ursprünglichen Werte intakt, für blitting. Eine Lösung ist nicht elegant, aber funktioniert, ist die folgende:
Hinweis: es ist viel schneller zu ändern, jedes pixel des QImage, und dann tun
painter.drawImage()
als Zeichnung der einzelnen pixel mit entsprechenden alpha von hand.InformationsquelleAutor ypnos