Laden...

Form.Region - bessere Qualität ?!

Erstellt von Epic vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.495 Views
E
Epic Themenstarter:in
12 Beiträge seit 2008
vor 12 Jahren
Form.Region - bessere Qualität ?!

Hi liebe myCSharp Gemeinde !

Ich habe folgende Frage:

Ich setze mit Form.Region und GraphicsPath eine Region fest (Als test eine Ellipse)...

Die ist aber sowas von "eckig" rund, kann man die Qualität nicht irgendwie verbessern ?

Hier das Beispiel habe ich angehängt... einfach ein roter Kreis mit leider zackigem Rand 😦

Code:


            GraphicsPath gp = new GraphicsPath();
            gp.AddEllipse(new Rectangle(0, 0, 300, 300));
            gp.CloseFigure();

            this.Region = new Region(gp);
            this.BackColor = Color.Red;

Danke für eure Bemühungen ...

Grüße

E
Epic Themenstarter:in
12 Beiträge seit 2008
vor 12 Jahren

Heyo,

habe gerade weiter gegooglet wie so ein wilden... Und dann bei Bilder geschaut, ob dort eins bei ist wo der Rand besser ist... Da bin ich auf folgendes gestoßen:

How to build a none rectangular form using C#

Dieser setzt TransparencyKey auf Control, wie die DefaultBackColor von einer Form ist und zeichnet danach mit HighQuality bzw. AntiAlias seine runde Ellipse, die wesentlich besser aussieht...

Denke das ist dann die gängige Methode... Außer es hat noch einer einen anderen Vorschlag 😃

Gruß

B
42 Beiträge seit 2010
vor 12 Jahren

also zumindest bei mir kann ich keinen großen unterschied sehen,
mich würd auch sehr interesserieren wie das normaler weise gemacht wird
bzw. wie funktioniert das bei picasa mit dem rotierenden splash screen?

S
753 Beiträge seit 2006
vor 12 Jahren

In der Computergrafik würde man jetzt sagen, dass man hier Anti-Aliasing oder Edge Smoothing benötigen würde.

Vielleicht hilft das beim Googeln

Life is a short

E
Epic Themenstarter:in
12 Beiträge seit 2008
vor 12 Jahren

Ja das AntiAliasing kannst du aber bei Form.Region nicht aktivieren 😃, dort setzt du ja nur den Umriss der Form...

Aber in meinem 2ten Post ist eine 2te Variante, dort setzt man die gesamte Form die TransparencyKey Farbe auf Control, dann ist sie durchsichtig, dann zeichnet man seinen Kreis im OnPaint mit AntiAlias = True..., dann sieht es aufjedenfall schonmal besser aus als mit Form.Region 😃

Aber ist das nun die gängige Methode oder gibt es noch eine andere (bessere) ?

Grüße

5.742 Beiträge seit 2007
vor 12 Jahren

Mit WinForms ist mir keine bekannt.

E
Epic Themenstarter:in
12 Beiträge seit 2008
vor 12 Jahren

hey,

ok danke ! Dann hat sich das ja geklärt!

Grüße !!

1.130 Beiträge seit 2007
vor 12 Jahren

Naja mit der Winapibekommt man schon schöne Übergänge und so hin:

A lovely goldfish desktop pet (using alpha-PNG and GDI+)
Per Pixel Alpha Blend in C#

Hat aber den unschönen Nebeneffekt, dass kein WM_PAINT mehr gesendet wird. Das heißt in der Praxis:

  1. Untergeordnete Steuerelemente werden überhaupt nicht gezeichnet, obwohl sie immernoch bedienbar sind
  2. Übliches OnPaint wird niemals aufgerufen.

Um das zu umgehen ist wirderum reichlich Trixxerei nötig, aber es hat sich jemand die Mühe schon gemacht:
An Alpha Channel Composited Windows Form with Designer Support

Alternativ unterstützt WPF das auch von Haus aus, ohne unschöne Nebeneffekte^^

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!