DrawRectangle in Lockbitarray (zeichnen)

  • VB.NET

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

    DrawRectangle in Lockbitarray (zeichnen)

    Huhu, ich habe gerade das Lockbits entdeckt und es ist um einiges schneller bei großen Bitmaps.

    Ich habe eben versucht ein Rechteck zu zeichnen und das war mein erster Code dazu.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. For Each i In test(New Point(50, 50), 50, 50, bmp.Size)
    2. bmp_array(i) = 0
    3. bmp_array(i + 1) = 0
    4. bmp_array(i + 2) = 0
    5. Next

    VB.NET-Quellcode

    1. Private Function test(ByVal p As Point, ByVal w As Integer, ByVal h As Integer, ByVal size As Size) As List(Of Integer)
    2. Dim K As New List(Of Integer)
    3. Dim j As Integer = ((p.Y - 1) * size.Width * 3) + p.X
    4. If j Then
    5. For i As Integer = j To j + w * 3
    6. K.Add(i)
    7. Next
    8. For i As Integer = j + (3 * size.Width) To j + ((h - 1) * size.Height * 3) Step (3 * size.Width)
    9. K.Add(i)
    10. Next
    11. For i As Integer = j + (3 * size.Width) + (w * 3) To j + (w * 3) + ((h - 1) * size.Height * 3) Step (3 * size.Width)
    12. K.Add(i)
    13. Next
    14. For i As Integer = j + ((3 * size.Width) * h) To j + ((3 * size.Width) * h) + w * 3
    15. K.Add(i)
    16. Next
    17. End If
    18. Return K
    19. End Function


    Wüsste denn jemand eine einfachere Variante um die Byte im Array zu ändern um am Ende ein Rechteckt erstellen zu koennen?

    Schleife 1 ist der obere Strich
    Schleife 2 & 3 jeweils die senkrechten
    Schleife 3 der untere Strich

    Mir geht es darum, den Schleifenhaufen irgendwie abzukürzen.
    In Arbeit...
    Fang an mit Option Strict On.

    vico255 schrieb:

    VB.NET-Quellcode

    1. Dim j As Integer = ((p.Y - 1) * size.Width * 3) + p.X
    2. If j Then
    Visual Studio - Empfohlene Einstellungen
    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!
    prinzipiell ist das schon richtig, mit 3 Schleifen - du willst ja auf Speed optimieren: Eine für obere Linie, eine für beide Senkrechten, eine für die untere Linie.

    Ist nur komisch, dass du da eine Methode hast, die eine List(Of Integer) zurückgibt, statt dass du das Array der Methode übergibst, und die Pixelt dann gleich ins Array hinein.