Laden...

Wie: Weich Zeichnen, Oder Blendeffekt

Erstellt von Vassili vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.503 Views
Vassili Themenstarter:in
187 Beiträge seit 2005
vor 17 Jahren
Wie: Weich Zeichnen, Oder Blendeffekt

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.

5.941 Beiträge seit 2005
vor 17 Jahren

Hallo Vassili

Es gibt Generatoren für solche Lade-Bilder, diese können auch umsonst verwendet werden.

Gruss Peter

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

Vassili Themenstarter:in
187 Beiträge seit 2005
vor 17 Jahren

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.

S
1.047 Beiträge seit 2005
vor 17 Jahren

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 -.-

Vassili Themenstarter:in
187 Beiträge seit 2005
vor 17 Jahren

Rechtecke im Kreis? was möchtest denn genau machen?

S
1.047 Beiträge seit 2005
vor 17 Jahren

so ein bild wie du es oben hast erstellen g

also rechtecke die an einem kreis angeordnet sind...

Vassili Themenstarter:in
187 Beiträge seit 2005
vor 17 Jahren

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.

S
1.047 Beiträge seit 2005
vor 17 Jahren

dank dir =)