Alphablending

Alles rund um die Programmierung mit Qt
Antworten
JoseMan
Beiträge: 121
Registriert: 4. März 2009 18:09

Alphablending

Beitrag von JoseMan »

Hi, ich komme einfach nicht weiter, folgendes:

Ich habe ein QIamge (ARGB) und ich möchte ein Transparentes Rechteck über eine Region des QImages, welches gerade in einem Childwindow angezeigt wird, mittels alphablending drüber zeichnen.
Das Problem ist nun, wenn ich bei meinem QImage den Alphawert auf max (255) setze, kann ich kein transparentes Rechteck mehr darüber zeichnen (also man sieht es da nicht mehr). Setze ich den Alphawert für das QImage auf z.B. 128, dann geht es, aber das QImage ist dann eben auch transparent und es "scheint" der Hintergrund des Fensters durch, das ist natürlich blöd!

Hier mal ein bissl Code:
1.) in meiner ChildWindow-Klasse (geerbt von QMainWindow) im Konstruktor.

Code: Alles auswählen

	mImage = new QImage(size(),QImage::Format_ARGB32);
In der PaintEvent-Methode zeichne ich:

Code: Alles auswählen

QPainter imagePainter(mImage);
zeichneBild(&imagePainter);

QPainter painter(this);

QSize size(size());
	painter.drawPixmap(0,0,size.width(),size.height(),QPixmap::fromImage(*mImage));
	
if(mSelectionRectImage)
{
	QSize selectRectSize(mSelectionRectImage->size());
  painter.drawPixmap(0,0,selectRectSize.width(),selectRectSize.height(),QPixmap::fromImage(*mSelectionRectImage));
	}

Und hier erzeuge ich des Rect:

Code: Alles auswählen

if(mSelectionRectImage==NULL)
	mSelectionRectImage = new   
       QImage(QSize(100,100),QImage::Format_ARGB32_Premultiplied);
			
	QPainter painter(mSelectionRectImage);
	QColor color(0,100,0,100);
	painter.fillRect(0,0,100,100,color);

       update();

Please, need Help!!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wie sollte das so auch funktionieren? Wenn ich über ein Bild ein anderes zeichne welches transparent ist... was soll da passieren?
Du muss schon das zu zeichnende Bild direkt manipulieren.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
JoseMan
Beiträge: 121
Registriert: 4. März 2009 18:09

Beitrag von JoseMan »

Christian81 hat geschrieben:Wie sollte das so auch funktionieren? Wenn ich über ein Bild ein anderes zeichne welches transparent ist... was soll da passieren?
Naja, jenachdem wie der Alphakanal aussieht. Voll-Transparent, Halb-Transparent oder eben garnicht transparent.
Du muss schon das zu zeichnende Bild direkt manipulieren.
Wozu gibt es dann sowas wie KompositionsModi?

bye
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Vielleicht würde das auch funktionieren - allerdings sollte man im paintEvent() so wenig wie möglich machen damit die Performance nicht so leidet.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
JoseMan
Beiträge: 121
Registriert: 4. März 2009 18:09

Beitrag von JoseMan »

Okay. Mmh, verstehe.
....
Also sollte ich mein eigenes Alpha-Blending schreiben?

Ciao J---
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wieso eigenes Alpha-Blending? Nimm dein Bild, setze den Alpha-Buffer und im Paint-Event lässt Du das Bild malen und fertig.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
JoseMan
Beiträge: 121
Registriert: 4. März 2009 18:09

Beitrag von JoseMan »

Okay, danke für deine Tipps.
ich habe es nun hinbekommen. Letztendlich habe ich es auch so gemacht.
Also im PaintEvent mein QImage gezeichnet und dann

Code: Alles auswählen

QPainter::fillrect(QRect(..),QColor(..));
funktioniert prima!
wenn ich da jetzt rückblickend das betrachte, frage ich mich, wieso das so schwer war :?

Ciao
Antworten