Vb.NET GDI+ Linie zeichnen (weiß-schwarz-weiß)

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Vb.NET GDI+ Linie zeichnen (weiß-schwarz-weiß)

    Hallo zusammen,

    ich versuche leider erfolglos, eine Linie zu zeichnen, die 2 Farbverläufe hat (von weiß zu schwarz und wieder zu weiß).
    1 Farbverlauf ist ja kein Problem dank LinearGradientBrush, aber es gibt keine Überladung, um mehrere Farbverläufe zu benutzen.
    Nach einiger Zeit stieß ich auf PathGradientBrush. Hier kann man die Mittel- und die Randfarben festlegen. Ich habe auch versucht,
    diesen einzusetzen, doch anscheinend ist er nur für geschlossene Formen gedacht, denn wenn ich diesen Quellcode ausführe (von
    der VB.NET Doku übernommen & abgeändert), kommt folgender Fehler: OutOfMemoryException / Kein Arbeitsspeicher.
    Ich arbeitete in einer Druckansicht und nutze große Abstände zwischen den Punkten (500-550), vielleicht tritt der Fehler auch deswegen auf?
    Ich bin mir nicht sicher, woran es liegt.

    VB.NET-Quellcode

    1. Private Function GetLinePen(ByVal P1 As Point, ByVal P2 As Point) As Pen
    2. Dim gp As New Drawing2D.GraphicsPath()
    3. gp.AddLine(P1, P2)
    4. Dim LineBrush As Drawing2D.PathGradientBrush = New Drawing2D.PathGradientBrush(gp)
    5. LineBrush.CenterPoint = New PointF(P2.X - P1.X / 2, P1.Y)
    6. LineBrush.CenterColor = Color.Black
    7. LineBrush.SurroundColors = {Color.White}
    8. Dim LinePen As New Pen(LineBrush)
    9. Return LinePen
    10. End Function

    Irgendwie ist das auch nicht die beste Lösung :(
    Hat jemand eine Idee, wie man eine solche Linie (weiß-schwarz-weiß) zeichnen kann?

    VisualBasic-Frager

    Hallo Artenus,

    das schien ich leider übersehen zu haben ^^
    Aber so funktioniert es jetzt:

    VB.NET-Quellcode

    1. Private Function GetLinePen(ByVal P1 As Point, ByVal P2 As Point) As Pen
    2. Dim LineBrush As New Drawing2D.LinearGradientBrush(P1, P2, Color.White, Color.Black)
    3. Dim cb As New Drawing2D.ColorBlend
    4. Dim Colors As Color() = {Color.White, Color.Black, Color.White}
    5. Dim Positions As Single() = {0.0F, 0.5F, 1.0F}
    6. cb.Colors = Colors
    7. cb.Positions = Positions
    8. LineBrush.InterpolationColors = cb
    9. Dim LinePen As New Pen(LineBrush)
    10. Return LinePen
    11. End Function


    Danke!

    VisualBasic-Frager

    @VisualBasic-Frager Warum gibst Du das Graphics-Objekt nicht gleich mit rein und lässt die Routine die Linie gleich zeichnen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!