Spirographensoftware

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Spirographensoftware

    Hallo zusammen,
    ich habe folgendes Problem, das Programm läuft, zeig aber keine Ergebnisse an:
    Hier der Code:

    VB.NET-Quellcode

    1. Public Class FormMain
    2. Private rand As New Random()
    3. Private bmp As Bitmap
    4. Private g As Graphics
    5. Private benutzerFarbe As Color = Color.Blue
    6. Private Sub FormMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    7. bmp = New Bitmap(PictureBox1.Width, PictureBox1.Height)
    8. g = Graphics.FromImage(bmp)
    9. PictureBox1.Image = bmp
    10. ComboBoxFarben.Items.AddRange({"Zufällig", "Farbverlauf", "Benutzer"})
    11. ComboBoxFarben.SelectedIndex = 0
    12. Dim stift As New Pen(Color.Black)
    13. ZeichneSpirograph()
    14. End Sub
    15. Private Sub ZeichneSpirograph()
    16. g.Clear(Color.White)
    17. Dim R100 As Double = NumericUpDown100.Value
    18. Dim r40 As Double = NumericUpDown40.Value
    19. Dim d60 As Double = NumericUpDown60.Value
    20. Dim centerX As Integer = PictureBox1.Width \ 2
    21. Dim centerY As Integer = PictureBox1.Height \ 2
    22. Dim lastPoint As Point = Point.Empty
    23. Dim steps As Integer = 2000
    24. For i As Integer = 0 To steps
    25. Dim t As Double = i * 2 * Math.PI / steps
    26. Dim x As Double = (R100 - R100) * Math.Cos(t) + d60 * Math.Cos((R100 - R100) / R100 * t)
    27. Dim y As Double = (R100 - R100) * Math.Sin(t) - d60 * Math.Sin((R100 - R100) / R100 * t)
    28. Dim px As Integer = centerX + x
    29. Dim py As Integer = centerY + y
    30. If lastPoint <> Point.Empty Then
    31. Dim pen As Pen = WähleStift(i, steps)
    32. g.DrawLine(pen, lastPoint, New Point(px, py))
    33. End If
    34. lastPoint = New Point(px, py)
    35. Next
    36. PictureBox1.Invalidate()
    37. End Sub
    38. Private Function WähleStift(i As Integer, max As Integer) As Pen
    39. Select Case ComboBoxFarben.SelectedItem.ToString()
    40. Case "Zufällig"
    41. Return New Pen(Color.FromArgb(rand.Next(256), rand.Next(256), rand.Next(256)))
    42. Case "Farbverlauf"
    43. Dim ratio As Double = i / max
    44. Dim r40 As Integer = 255 * ratio
    45. Dim b As Integer = 255 - r40
    46. Return New Pen(Color.FromArgb(r40, 0, b))
    47. Case "Benutzer"
    48. Return New Pen(benutzerFarbe)
    49. Case Else
    50. Return New Pen(Color.Black)
    51. End Select
    52. End Function
    53. Private Sub ButtonZeichnen_Click(sender As Object, e As EventArgs) Handles ButtonZeichnen.Click
    54. ZeichneSpirograph()
    55. End Sub
    56. Private Sub ButtonSpeichern_Click(sender As Object, e As EventArgs) Handles ButtonSpeichern.Click
    57. Dim dlg As New SaveFileDialog()
    58. dlg.Filter = "JPG Bild|*.jpg"
    59. If dlg.ShowDialog() = DialogResult.OK Then
    60. bmp.Save(dlg.FileName, Imaging.ImageFormat.Png)
    61. End If
    62. End Sub
    63. Private Sub ComboBoxFarben_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBoxFarben.SelectedIndexChanged
    64. If ComboBoxFarben.SelectedItem.ToString() = "Benutzer" Then
    65. If ColorDialog1.ShowDialog() = DialogResult.OK Then
    66. benutzerFarbe = ColorDialog1.Color
    67. End If
    68. End If
    69. End Sub
    70. Private Sub Beenden_Click(sender As Object, e As EventArgs) Handles Beenden.Click
    71. Me.Hide()
    72. End Sub
    73. End Class


    Danke für die Mühe
    Manfred

    CodeTags gesetzt
    Thema verschoben; Das Thema wird automatisch dort erstellt, wo man sich befindet, wenn man auf [✱ Neues Thema] klickt.
    ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Willkommen im Forum.

    Ich weiß ja nicht, was es werden soll, aber in Zeile#33 und #34 ergibt (R100 - R100) immer Null.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @ManniK Ebenfalls: Willkommen im Forum. :thumbup:
    Bevor Du Dich weiter dem Programmieren widmest, solltest Du Deinem Studio die empfohlenden Einstellungen verpassen:
    Visual Studio – Empfohlene Einstellungen
    Option Strict On ist hier angesagt.
    Ein Programm solltest Du niemals mit Me.Hide() beenden, das Programm ist dann immer noch laufend im Arbeitsspeicher des PC oder des Studios.
    Verwende Me.Close().
    Du erstellst ein Bild im PNG-Format und speicherst es als JPG ab, das verstehen möhlicherweise andere Programme nicht richtig.
    Und:
    Gemalt wird im Paint-Ereignis der PictureBox, da bekommst Du die Graphics-Instanz als Member der PaintEventArgs übergeben.
    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!