Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie: Weich Zeichnen, Oder Blendeffekt
Vassili
myCSharp.de - Member

Avatar #avatar-2291.jpg


Dabei seit:
Beiträge: 187
Herkunft: Essen

Themenstarter:

Wie: Weich Zeichnen, Oder Blendeffekt

beantworten | zitieren | melden

Hallo Leute,

ich hab ein kleines Problem, dass mir ins Auge sticht.

Ich habe ein kleines Steuerelement gebastelt, bei dem ich eigentlich nur die OnPaint Methode überschreibe. In dieser zeichne ich ein Vieleck. Soweit so schön. Das Vieleck wird auch wie gewünscht angezeigt.

Was mich aber stört, ist diese verpixelte ansicht. Am Rand meines Vielecks möchte ich doch gerne einen Schatten oder Blendeffekt haben. Zum Beispiel diese a-gif (nicht von mir und möchte ich nicht verwenden, wegen urheberrechtsverletzung) http://www.ip2location.com/images/wait.gif hat sowas.

Im Anhang hab ich ein Screenshot hinzugefügt, wie das im moment aussieht.

Zum Zeichnen wird folgender Code verwendet:

 
lineBrush = new SolidBrush(Color.FromArgb(colorValue, colorValue, colorValue));
e.Graphics.FillPolygon(
	lineBrush,
	new PointF[] { startLeftPoint, endLeftPoint, endRightPoint, startRightPoint },
	System.Drawing.Drawing2D.FillMode.Winding
);

Das Vieleck (Eigentlich ein gewinkeltes Rechteck) wird mit einem SolidBrush in dem Bereich des Vielecks gezeichnet.

Der Schatten, Blendeffekt oder wie auch immer man das nennen soll, ist das einzige was mir fehlt, aber ich bin nicht der erfahrenste was den Drawing Namespace angeht.
Attachments
private Nachricht | Beiträge des Benutzers
Peter Bucher
myCSharp.de - Experte

Avatar #jVxXe7MDBPAimxdX3em3.jpg


Dabei seit:
Beiträge: 5.940
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Hallo Vassili

Es gibt Generatoren für solche Lade-Bilder, diese können auch umsonst verwendet werden.
- http://www.google.ch/search?hl=de&q=ajax+loading+images&meta=


Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

- https://peterbucher.ch/ - Meine persönliche Seite
- https://fpvspots.net/ - Spots für FPV Dronenflüge
private Nachricht | Beiträge des Benutzers
Vassili
myCSharp.de - Member

Avatar #avatar-2291.jpg


Dabei seit:
Beiträge: 187
Herkunft: Essen

Themenstarter:

beantworten | zitieren | melden

Ja, ich hätte natürlich jetzt auch einen generator verwenden können. Mein Problem ist nur der: Ich muss auf die Ladezeiten in meiner Anwendung reagieren können. Die Darstellung soll (ein wenig) dynamisch angepasst werden, wenn die Anwendung kurze Zeit nicht reagieren sollte.

Aber jetzt hab ich es mit dem Code auch geschafft. Habe gerade von anderer Seite einen Tipp bekommen um diese Verpixelte Ansicht zu verbessern.

e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;

Jetzt werden die Vielecke mit Antialiasing gezeichnet und die Pixel sind nun geschmeidiger.

Sorry wegen dem unnützen Thread.
private Nachricht | Beiträge des Benutzers
sheitman
myCSharp.de - Member



Dabei seit:
Beiträge: 1.047

beantworten | zitieren | melden

dein "unnützer" thread hat mich dazu inspiriert auch mal so ein control zu bauen^^

schlag mich grad mit den rechtecken in kreis malen rum... glaub meine mathematik is eingerostet -.-
private Nachricht | Beiträge des Benutzers
Vassili
myCSharp.de - Member

Avatar #avatar-2291.jpg


Dabei seit:
Beiträge: 187
Herkunft: Essen

Themenstarter:

beantworten | zitieren | melden

Rechtecke im Kreis? was möchtest denn genau machen?
private Nachricht | Beiträge des Benutzers
sheitman
myCSharp.de - Member



Dabei seit:
Beiträge: 1.047

beantworten | zitieren | melden

so ein bild wie du es oben hast erstellen *g*

also rechtecke die an einem kreis angeordnet sind...
private Nachricht | Beiträge des Benutzers
Vassili
myCSharp.de - Member

Avatar #avatar-2291.jpg


Dabei seit:
Beiträge: 187
Herkunft: Essen

Themenstarter:

beantworten | zitieren | melden

http://www.codeproject.com/cs/miscctrl/clock.asp
http://www.codeproject.com/dotnet/vgclock.asp#The%20Minute%20Hand8

Schau dir diese Seiten mal an. Wie du bei mir siehst habe ich ja 12 dieser Rechtecke. Das wäre bei einer Uhr die 12 Nummern damit hättest du schonmal die vierecke an der Position, wenn du dich an die Rechnungen hälst wie in den Beispielen.

DateTime n = DateTime.Now;
Single angle = 360 * ((n.Second + n.Millisecond / 1000F) * 20 % 60) / 60;
angle -= angle % 30;

currentPoint = new PointF(
	Convert.ToSingle(Math.Cos(2 * Math.PI * angle / 360) * 20 + 5),
	Convert.ToSingle(Math.Sin(2 * Math.PI * angle / 360) * 20 + 5)
);

Das da oben sollte schon ein guter ansatz sein. Damit springt der Punkt immer um 30° im Uhrzeigersinn. Dies in 3 Sekunden. Wenn du darum noch eine Schleife einbaust und den Angle bei der Schleife immer -= 30 rechnest bekommst du die restlichen 11 Punkte raus.
private Nachricht | Beiträge des Benutzers
sheitman
myCSharp.de - Member



Dabei seit:
Beiträge: 1.047

beantworten | zitieren | melden

dank dir =)
private Nachricht | Beiträge des Benutzers