QLabel Transparenz ändern

Alles rund um die Programmierung mit Qt
Antworten
reinki0013
Beiträge: 174
Registriert: 11. November 2008 09:37
Wohnort: AUT

QLabel Transparenz ändern

Beitrag von reinki0013 »

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
ichbinsisyphos
Beiträge: 24
Registriert: 4. Mai 2010 16:00

Re: QLabel Transparenz ändern

Beitrag von ichbinsisyphos »

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?
reinki0013
Beiträge: 174
Registriert: 11. November 2008 09:37
Wohnort: AUT

Re: QLabel Transparenz ändern

Beitrag von reinki0013 »

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
ichbinsisyphos
Beiträge: 24
Registriert: 4. Mai 2010 16:00

Re: QLabel Transparenz ändern

Beitrag von ichbinsisyphos »

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.
ceumern
Beiträge: 28
Registriert: 16. September 2011 11:25

Re: QLabel Transparenz ändern

Beitrag von ceumern »

Ich empfehle einen Blick hierrein zu werfen:

http://doc.trolltech.com/4.6/qpainter.h ... tion-modes
Antworten