Schleifen Problem

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Gelöschter Benutzer.

    Schleifen Problem

    Hey,
    ich bin derzeit einen Picturesplitter am schreiben, allerdings komme ich nicht weiter,
    also ein Bild ist 512 x 512 pixel groß, darin befinden sich 64 Frames(Pro Spalte und Zeile 8)
    also so:

    Quellcode

    1. 1 2 3 4 5 6 7 8
    2. 1 2 3 4 5 6 7 8
    3. 1 2 3 4 5 6 7 8
    4. 1 2 3 4 5 6 7 8
    5. 1 2 3 4 5 6 7 8

    eine frame ist 64 x 64 Pixel groß, ich will jetzt alle Bilder in ein Array Kopiere, hier einfach mal mein code der nicht(richtig) funktioniert^^:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim SpriteSize As Size = New Size(64, 64)
    3. Dim rows As Integer = 8
    4. Dim columns As Integer = 8
    5. Dim BMap As Bitmap
    6. Dim TempSprite As Bitmap
    7. Dim Sprites As New ArrayList
    8. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    9. Dim OFD As New OpenFileDialog
    10. OFD.Filter = "Windows Bitmap(*.bmp)|*.bmp"
    11. If OFD.ShowDialog = Windows.Forms.DialogResult.OK Then
    12. TextBox1.Text = OFD.FileName
    13. BMap = New Bitmap(TextBox1.Text)
    14. End If
    15. End Sub
    16. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    17. Dim FBD As New FolderBrowserDialog
    18. If FBD.ShowDialog = Windows.Forms.DialogResult.OK Then
    19. TextBox2.Text = FBD.SelectedPath
    20. End If
    21. End Sub
    22. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    23. If TextBox1.TextLength > 0 And TextBox2.TextLength > 0 Then
    24. For x = 0 To rows
    25. For y = 0 To columns
    26. Dim TempSprite As New Bitmap(SpriteSize.Width, SpriteSize.Height)
    27. For x1 = 0 To SpriteSize.Width - 1
    28. For y1 = 0 To SpriteSize.Height - 1
    29. Dim Farbe As Color = BMap.GetPixel((x * SpriteSize.Width) + x1, (y * SpriteSize.Height) + y1)
    30. TempSprite.SetPixel(x1, y1, Farbe)
    31. Next
    32. Next
    33. Sprites.Add(TempSprite)
    34. TempSprite.Save(TextBox2.Text & "/" & x & y & ".png")
    35. Next
    36. Next
    37. Else
    38. MsgBox("Du hast nicht alle Felder richtig ausgefüllt", MsgBoxStyle.Exclamation, "Fehler!")
    39. End If
    40. End Sub
    41. End Class


    Es wird nur die erste spalte gespeichert X(

    kann mir jemand helfen?

    lg.
    Hi.
    Im Code ist definitiv kein Fehler, dass kann nicht sein o_O
    Hast du vielleicht eine Funktion, die du nicht mit hier veröffentlicht hast, die möglicherweise die beiden Variablen `rows` und `columns` auf 1 überschreibt?

    ~ Chris
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.
    Hi Freakstar!

    Die Zeilen 26 und 27 gefallen mir nicht. Die Schleifen von 0 bis 8 (Wert von rows bzw. colums) ergibt jeweils 9 Durchläufe.

    VB.NET-Quellcode

    1. For x = 0 To rows - 1
    2. For y = 0 To columns - 1


    ...wenn du dann noch den Dateinamen in Zeile 36 anpasst...

    VB.NET-Quellcode

    1. TempSprite.Save(TextBox2.Text & "/" & (x + 1) & (y + 1) & ".png")


    ...sollte es hinhauen!

    LG, Kurti!