tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
1238
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    j3$u5 j3$u5 ist offline Rookie
    Registriert seit
    Apr 2008
    Beiträge
    9
    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.
     

  2. #2
    RedWraith RedWraith ist offline Mitglied Silber
    Registriert seit
    Aug 2007
    Beiträge
    61
    Meinst du so ?
    Name:  arc.png
Hits: 22
Größe:  770 Bytes

    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)
     

  3. #3
    j3$u5 j3$u5 ist offline Rookie
    Registriert seit
    Apr 2008
    Beiträge
    9
    Vielen Dank das werd ich versuchen
     

Ähnliche Themen

  1. mit JS Tabelle füllen
    Von BIAsTeR im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 22.04.08, 03:01
  2. TableViewer füllen
    Von tormartin im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 20.02.08, 19:11
  3. Eingabefelder füllen
    Von outdoorshop24 im Forum PHP
    Antworten: 7
    Letzter Beitrag: 01.04.07, 21:00
  4. pfadfläche füllen
    Von greecesakis im Forum Photoshop
    Antworten: 8
    Letzter Beitrag: 12.12.03, 18:44
  5. füllen ******
    Von vr501 im Forum Photoshop
    Antworten: 3
    Letzter Beitrag: 27.09.01, 22:38