Form einer QPixmap anpassen bzw. weißen Hintergrund verschwinden lassen
-
Hi,
ich habe ein Programm mit einem Spielfeld als Hintergrund.in main.cpp:
spielfeld->setStyleSheet("QWidget {background-image: url(:/dateien/hintergrund.png) }");
soweit kei Problem weil es sich bei dem Spielfeld um ein Rechteck handelt.
Jetzt soll aber auf dem Spielfeld ein Spieler angezeigt werden.
Im Konstruktor der Klasse Spieler:setPixmap(QPixmap(":/dateien/spieler.png"));
natürlich ist in Datei spieler.png ein Bild was einen weißen Hintergrund hat.
Ich möchte diesen Hintergrund aber nicht sehen, weil er natürlich das Spielfeld überdeckt.
Nur die Form des Spielers soll das Spielfeld überdecken. Diese ist aber nicht quadratisch.
Kann mir jemand einen Tipp geben?
-
natürlich ist in Datei spieler.png ein Bild was einen weißen Hintergrund hatt
Was daran ist natürlich?
-
Wenn man mit Paint etwas zeichnet und speichert ist das immer ein Rechteck.
-
@theAnfänger77 sagte in Form einer QPixmap anpassen bzw. weißen Hintergrund verschwinden lassen:
Wenn man mit Paint etwas zeichnet und speichert ist das immer ein Rechteck.
Wo kommt in meiner Frage Rechteck vor?
-
Ist doch egal. Jedenfalls scheint es mir so, dass die einzige Möglichkeit ist, mit sehr vielen kleinen Rechtecken um die Form des Spielers herum den weißen Hintergrund wieder mit dem richtigen Hintergrund zu überdecken. Ich dachte halt dass es irgendeine Möglichkeit gibt das ohne diesen großen Aufwand zu machen. Der Hintergrund ist ja nur weiß. Liegt also nahe dass die Klassenbibliothek etwas bereitstellt was das Weiße erkennt und ausblendet bzw. überdeckt. Wäre ja auch nicht das erste Programm was auf einem Hintergrund ein Bild anzeigt was eine individuelle Form hat.
-
-
Die einfachste Lösung ist die Hintergrundfarbe der datei spieler.png einfarbig zu machen und den Hintergrund einfach auch einfarbig mit der selben Farbe. Dann fällt es nicht auf. Dachte halt nur dass es hier eine professionellere Lösung gibt.
-
@theAnfänger77 Normalerweise wird einfach die Transparenz in der Bilddatei selber genutzt. png und webp sind die wohl bekanntesten Dateiformate dafür. Und einen Photoshop braucht man dafür auch nicht, gimp oder paint. net (Edit: das wurde als Link angezeigt, ist aber keiner) können das auch.
Zur Laufzeit ginge es natürlich ebenfalls. Dann würde aber eine andere Farbe zum Einsatz kommen. Eine Farbe, die in dem Bild möglichst sonst nicht vorkommt, Magenta zum Beispiel. Früher wurde das noch regelmäßig so gemacht, heute eher selten, auch, weil Halbtransparenzen so nicht möglich sind.
Du müsstest dich also kurz in ein Bildbearbeitungsprogramm einarbeiten, den Hintergrund löschen und die Datei(en) mit dem Transparenzkanal abspeichern.
-
Du kannst auch die Farbe weiß durch
Qt::transparent
ersetzen, s. Qt/PyQt(/Other?): How do I change specific colors in a pixmap? (In dem Code der Antwort dannp.setPen(Qt::transparent)
benutzen.Aber einfacher wäre es, wenn die Bilddatei selber schon, so wie @yahendrik geschrieben hat, passend mit dem Alpha-Kanal abgespeichert ist.
-
Danke!
paintnet ist eine Freeware die das super macht!
So geht es:
https://praxistipps.chip.de/paint-net-bild-transparent-machen_16764