hallo zusammen,
ich möchte bei einem QLabel (es wird ein QPixmap in diesem QLabel angezeigt) gerne die transparenz verändern.
Sprich es wäre toll wenn es etwas gibt, damit ich die Transparenz auf 50% oder so setzen kann...
gibt es da was in diese richtung?
wäre toll wenn ihr mir weiterhelfen könnt...
danke,
lg reinki
QLabel Transparenz ändern
-
reinki0013
- Beiträge: 174
- Registriert: 11. November 2008 09:37
- Wohnort: AUT
-
ichbinsisyphos
- Beiträge: 24
- Registriert: 4. Mai 2010 16:00
Re: QLabel Transparenz ändern
Es werden sicher Leute noch bessere Vorschläge haben, aber soweit ich das verstehe ist der Alpha-Wert eine Eigenschaft einer QColor, nicht einer QPixmap und schon gar nicht des QLabels.
Du willst die Transparenz der Pixmap (bzw. der Farbwerte der Pixel darin) verändern, nicht des labels, das nur zum Verständnis.
Ich glaub es gibt Tricks mit denen man den Alpha-Wert einer fertigen Pixmap verändern kann, oder zumindest mit einer gewissen Transparenz über ein neues transparentes QPixmap zeichnen kann. Die hab ich aber im Moment nicht parat.
Ist Neuzeichnen eine Option, oder vielleicht überhaupt 2 Versionen im Konstruktor erzeugen und auf Abruf bereithalten?
Oder wird die QPixmap aus einem geladenen Bild erzeugt?
Du willst die Transparenz der Pixmap (bzw. der Farbwerte der Pixel darin) verändern, nicht des labels, das nur zum Verständnis.
Ich glaub es gibt Tricks mit denen man den Alpha-Wert einer fertigen Pixmap verändern kann, oder zumindest mit einer gewissen Transparenz über ein neues transparentes QPixmap zeichnen kann. Die hab ich aber im Moment nicht parat.
Ist Neuzeichnen eine Option, oder vielleicht überhaupt 2 Versionen im Konstruktor erzeugen und auf Abruf bereithalten?
Oder wird die QPixmap aus einem geladenen Bild erzeugt?
-
reinki0013
- Beiträge: 174
- Registriert: 11. November 2008 09:37
- Wohnort: AUT
Re: QLabel Transparenz ändern
hi,
besten dank für deinen tipp...
mit 2 verschiedenen bildern wird es wieder sehr unübersichtlich da es mehrere bilder sind...die QPixmap wird aus einem geladenen Bild erzeugt - also das bild ist schon fix fertig vorhanden, ich setzte es als QPixmap und dann zeige ich es auf dem QLabel an...
so richtig "glücklich" bin ich jetzt noch nicht...
hat sonst noch jemand diesbezüglich erfahrungen gemacht?
lg
besten dank für deinen tipp...
mit 2 verschiedenen bildern wird es wieder sehr unübersichtlich da es mehrere bilder sind...die QPixmap wird aus einem geladenen Bild erzeugt - also das bild ist schon fix fertig vorhanden, ich setzte es als QPixmap und dann zeige ich es auf dem QLabel an...
so richtig "glücklich" bin ich jetzt noch nicht...
hat sonst noch jemand diesbezüglich erfahrungen gemacht?
lg
-
ichbinsisyphos
- Beiträge: 24
- Registriert: 4. Mai 2010 16:00
Re: QLabel Transparenz ändern
So, ich hab gestern mal in alten Programmen gestöbert. Ich hab einmal versucht mit einem slider zwei Graustufenbilder auf einem QLabel ineinander übergehen zu lassen. Ursprünglich wollte ich die Transparenz der ganzen oberen Pixmap zu verändern und einfach über das untere drübermalen, aber so wie es aussieht war die einzige Möglichkeit die ich gefunden haben, Pixel für Pixel aus jedem der beiden Pixmaps auszulesen, Mittelwerte zu bilden und in ein neues Bild zu schreiben. Noch dazu hat man nur bei QImage Pixelzugriff.
Ich glaub, dafür gibts wirklich nichts speziell zugeschnittenes. Es gibt so ne "AlphaMask", aber die erlaubt nur volle Transparenz oder volle Deckkraft, nichts dazwischen.
Das ist nicht sehr elegant, aber wenn du nichts anderes findest kannst du auf alle Fälle:
a) mit QPixmap::toImage() ein temporäres QImage vom originalen QPixmap erzeugen
b) zweites temporäres QImage selber Größe mit Alpha-Kanal erzeugen
c) mit QImage::pixel(int x, int y) bekommst den Farbwert für jeden Pixel.
d) qRgb-Farbe in eine qRgba mit gewünschtem Deckungsgrad zwischen 0 und 255 umwandeln
e) jeden Pixel danach mit QImage::setPixel() ins neue QImage schreiben
d) und mit QPixmap::fromImage() in eine QPixmap zurückwandeln
Das kann man schön kompakt in eine Funktion packen die die teiltransparente QPixmap zurückliefert. Wenn die Bilder nicht sehr groß sind, wirds von der Rechenzeit wahrscheinlich auch zu verkraften sein.
Ich glaub, dafür gibts wirklich nichts speziell zugeschnittenes. Es gibt so ne "AlphaMask", aber die erlaubt nur volle Transparenz oder volle Deckkraft, nichts dazwischen.
Das ist nicht sehr elegant, aber wenn du nichts anderes findest kannst du auf alle Fälle:
a) mit QPixmap::toImage() ein temporäres QImage vom originalen QPixmap erzeugen
b) zweites temporäres QImage selber Größe mit Alpha-Kanal erzeugen
c) mit QImage::pixel(int x, int y) bekommst den Farbwert für jeden Pixel.
d) qRgb-Farbe in eine qRgba mit gewünschtem Deckungsgrad zwischen 0 und 255 umwandeln
e) jeden Pixel danach mit QImage::setPixel() ins neue QImage schreiben
d) und mit QPixmap::fromImage() in eine QPixmap zurückwandeln
Das kann man schön kompakt in eine Funktion packen die die teiltransparente QPixmap zurückliefert. Wenn die Bilder nicht sehr groß sind, wirds von der Rechenzeit wahrscheinlich auch zu verkraften sein.