ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
1238
1238
EMPFEHLEN
-
Hallo Gemeinde,
ich möchte gern ein Arc zeichen und füllen ich habe das auf zwei Arten getestet und zweimal ein Problem
1ter Versuch:
Code :1 2
Rectangle li = new Rectangle( 20, 75, 10, 20); g.DrawArc(VolPen, li, 90, 180);
Problem ist dabei dass ich das Arc nicht füllen kann
2ter Versuch:
Code :1 2 3 4 5 6 7
Rectangle li = new Rectangle( 20, 75, 10, 20); GraphicsPath gp = new GraphicsPath(); gp.AddArc(li, 90, 180); gp.CloseFigure(); if(Vol != 0) g.FillPath(StringBrush, gp); g.DrawPath(VolPen, gp);
hier das Problem wenn Vol 0 ist ist das Arc zwar nicht ausgefüllt aber es hat eine Line auf der offenen Seite und das ist unerwünscht da dies der Abschluss für eine art Progessbar sein soll.
Es wäre noch zu erwähnen dass ich nicht auf ein Form zeichne sondern direkt auf den Desktop ich kann also auch kein Progressbar Steuerelment verwenden.
Danke für eure Hilfe.
-
Meinst du so ?

Ich hab den Arc in meinem Beispiel gedreht, damit ich mir das besser vorstellen kann.
Ich hab zuerst folgende Funktion geschrieben:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
Private Sub FillZeile(ByRef bmp As Bitmap, _ ByVal pt As Point, ByVal farbe_neu As Color) Dim schritt As Integer Dim left, right As Boolean Dim farbe_alt, cur As Color schritt = 1 left = False right = False farbe_alt = bmp.GetPixel(pt.X, pt.Y) bmp.SetPixel(pt.X, pt.Y, farbe_neu) Do If pt.X - schritt > 0 and not left Then cur = bmp.GetPixel(pt.X - schritt, pt.Y) If cur = farbe_alt Then bmp.SetPixel(pt.X - schritt, pt.Y, farbe_neu) Else left = True End If Else left = True End If If pt.X + schritt < bmp.Width and not right Then cur = bmp.GetPixel(pt.X + schritt, pt.Y) If cur = farbe_alt Then bmp.SetPixel(pt.X + schritt, pt.Y, farbe_neu) Else right = True End If Else right = True End If schritt += 1 Loop Until left And right End Sub
Diese Funktion bekommt ein Bitmap, eine Position in diesem Bitmap und eine Farbe geliefert. Die Funktion ließt dann an dem angegebenen Punkt in der Bitmap die Farbe aus, speichert sie und ersetzt sie mit der Farbe aus dem Parameter. Dann beginnt die Funktion damit sich solange nach links und nach rechts auszubreiten und die alte durch die neue Farbe zu ersetzen, bis sie auf eine andere Farbe trifft als die, die sie zu Beginn im angegebenen Punkt ausgelesen hat.
Die Funktion füllt also quasi eine Zeile (horizontal) mit einer Farbe aus.
Alles was ich jetzt noch machen muss, ist der Funktion die Zeilen im Arc zu übergeben. Angefangen bei der untersten und dann gehst du einfach x Zeilen nach oben, bis der gewünschte Füllsand erreicht ist.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Private Sub pb_Paint(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.PaintEventArgs) Handles pb.Paint Dim g As Graphics Dim bmp As Bitmap Dim li As New Rectangle(10, 10, 100, 100) bmp = New Bitmap(pb.Width, pb.Height) g = Graphics.FromImage(bmp) g.FillRectangle(Brushes.White, li) g.DrawArc(Pens.Black, li, 0, 180) g.Dispose() For i As Integer = 1 To 30 Me.FillZeile(bmp, New Point(60, 110 - i), Color.Gold) Next pb.Image = bmp End Sub
Geändert von RedWraith (03.09.10 um 09:00 Uhr)
-
Vielen Dank das werd ich versuchen
Ähnliche Themen
-
mit JS Tabelle füllen
Von BIAsTeR im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 22.04.08, 03:01 -
TableViewer füllen
Von tormartin im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 1Letzter Beitrag: 20.02.08, 19:11 -
Eingabefelder füllen
Von outdoorshop24 im Forum PHPAntworten: 7Letzter Beitrag: 01.04.07, 21:00 -
pfadfläche füllen
Von greecesakis im Forum PhotoshopAntworten: 8Letzter Beitrag: 12.12.03, 18:44 -
füllen ******
Von vr501 im Forum PhotoshopAntworten: 3Letzter Beitrag: 27.09.01, 22:38





Zitieren
Login




