Laden...

Mehrere (gezeichnete) transparente Rechtecke überlagern

Erstellt von Wax vor 13 Jahren Letzter Beitrag vor 13 Jahren 993 Views
Wax Themenstarter:in
731 Beiträge seit 2006
vor 13 Jahren
Mehrere (gezeichnete) transparente Rechtecke überlagern

Hallo zusammen,

ich zeichne in meinem Programm Rechtecke, gefüllt mit einer halbtransparenten Farbe.
Der Alphawert der Farbe wird innerhalb eines Timer-EventHandlers stetig erhöht, so das das neu gezeichnete Rechteck wieder etwas dunkler erscheint, als das zuvor gezeichnete.

Und genau da fängt das Problem schon an. Denn ich zeichne jedes mal ein neues Rechteck.

Gezeichnet wird mittels:


SolidBrush mySolidBrush = New SolidBrush(Color.FromArgb(tempAlpha, Color.Black));
e.Graphics.FillRectangle(mySolidBrush, myRect);

im Paint-Eventhandler eines Controls.

Da jedes mal ein neues Rechteck über das alte gezeichnet wird, addiert sich die Darstellung der einzelnen Rechtecke. Ich möchte aber eigentlich immer nur ein Rechteck mit dem aktuellen Alphakanal-Wert zeichnen.

Jedes mal erst das Control neu zeichnen zu lassen, damit das alte Rechteck quasi verschwindet würde wohl zu einem Flackern führen. Kann man nicht irgendwie eine Art Referenz auf so ein Rechteck halten? Mittels GDI+ wird das wohl nicht gehen oder was meint ihr?

MfG
wax

Gelöschter Account
vor 13 Jahren

geht nicht... Alternativ kannst du das Rechteck mit der Hintergrundfarbe erst übermalen und dann erst dein Rechteck zeichnen.

F
155 Beiträge seit 2009
vor 13 Jahren

Hallo,

wenn sie sich addieren, kannst du dann nicht einfach nur die Differenz zeichnen die noch fehlt um deinen Wert zu erreichen.


AlphaIst //die Summe aller Alpha werte bisher
AlphaSoll //dein Sollwert

SolidBrush mySolidBrush = New SolidBrush(Color.FromArgb(AlphaSoll-AlphaIst, Color.Black));

fz

"We better hurry up and start coding, there are going to be a lot of bugs to fix."

C
2.121 Beiträge seit 2010
vor 13 Jahren

Merk dir die Ausgangsbilder in einem eigenen Bild, dann kannst du darauf immer frisch ein Rechteck mit aktueller Transparenz zeichnen.
Im OnPaint reichts dann wenn du die gespeicherten Ergebnisse zeichnest.