Programm funktioniert nicht

  • Allgemein

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

    Programm funktioniert nicht

    Abend

    Keine Ahnung ob ich hier richtig bin oder nicht (einfach verschieben wenns falsch ist). Ich wollte eigentlich nur dass jemand mal den Code von meinem Programm durchschaut, weil es einfach nicht hinhaun will ;)

    Im Programm kann man mit einem Button nach einem Bild suchen, mit einem weiteren Button dieses Bild in einer Picturebox anzeigen lassen und mit dem dritten Button soll er das Bild nach einer bestimmten Farbe durchsuchen und anschließend einen MsgBox anzeigen.
    Leider wird mir die MsgBox nie angezeigt, aber es kommt auch kein Laufzeitfehler etc.

    Ich sags schon mal im vorraus! Ich kenne mich mit Lockbits nicht aus, deswegen hab ichs einfach mit get.Pixel gemacht ^^
    Und bin auch noch Amateur und programmiere nur manchmal in meiner Freizeit. Daher kann es sein, dass ich manchens komplizierter gemacht hab, als ihr das macht xD
    Bitte nicht zu streng mit mir umgehen ;)))

    VB.NET-Quellcode

    1. Public Class Form1
    2. Public pfad As String
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. Me.OpenFileDialog1.ShowDialog()
    5. pfad = Me.OpenFileDialog1.FileName
    6. TextBox1.Text = pfad
    7. End Sub
    8. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    9. If TextBox1.Text = "" Then
    10. MsgBox("KEIN PFAD GEWÄHLT")
    11. Else
    12. If TextBox1.Text.Contains(".png") Or TextBox1.Text.Contains(".jpg") Or TextBox1.Text.Contains(".PNG") Or TextBox1.Text.Contains(".JPG") Then
    13. PictureBox1.BackgroundImage = Image.FromFile(pfad)
    14. PictureBox1.BackgroundImageLayout = ImageLayout.Stretch
    15. Else
    16. MsgBox("Üngültiger Dateipfad")
    17. End If
    18. End If
    19. End Sub
    20. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    21. Dim bitmap As New Bitmap(pfad)
    22. Dim abort = False
    23. For y = 0 To bitmap.Height - 1
    24. For x = 0 To bitmap.Width - 1
    25. If bitmap.GetPixel(x, y) = Color.White Then
    26. MessageBox.Show("Gefunden!")
    27. abort = True
    28. Exit For
    29. End If
    30. Next
    31. If abort Then Exit For
    32. Next
    33. End Sub
    34. End Class
    Der vergleich mit Color.White wird afaik nie hinhauen - du musst die einzelnen R,G,B-Werte mit denen der Zielfarbe vergleichen, in dem Fall:
    If .R = 255 andalso .G = 255 andalso .B = 255 then

    Schau dir mal im Showroom die FastBitmap (oder heißt sie FastGraphics?) Lib an. Dort sind die Funktionen Get- und Setpixel mit Lockbits realisiert. Geht um einiges schneller und du kommst wiedermal um das Thema Lockbits rum xD

    Edit:
    Button1: Schau dir mal an, wie man den OpenFileDialog richtig verwendet, dann sparst du dir nähmlich:
    Button2: denn ein Filter für den OpenFileDialog regelt.

    lg

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

    Devilos schrieb:

    VB.NET-Quellcode

    1. If bitmap.GetPixel(x, y) = Color.White Then
    Das funktioniert leider so nicht, da Color.White und Color.FromArgb(255, 255, 255) verschieden sind, wie @FreakJNS: schon schrieb.
    Sieh Dir mal dies an:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Dim pfad As String
    4. Using dlg As New OpenFileDialog
    5. dlg.Filter = _
    6. "JPeg (*.jpg)|*.jpg|" & _
    7. "PNG (*.png)|*.png|" & _
    8. "Bitmaps (*.bmp)|*.bmp|" & _
    9. "Alle Dateien (*.*)|*.*"
    10. If dlg.ShowDialog <> Windows.Forms.DialogResult.OK Then
    11. Exit Sub
    12. End If
    13. pfad = dlg.FileName
    14. If Not (pfad.ToLower.EndsWith(".jpg") OrElse pfad.ToLower.EndsWith(".png")) Then
    15. Exit Sub
    16. End If
    17. End Using
    18. TextBox1.Text = pfad
    19. PictureBox1.BackgroundImage = Image.FromFile(pfad)
    20. PictureBox1.BackgroundImageLayout = ImageLayout.Stretch
    21. End Sub
    22. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    23. Dim bitmap As New Bitmap(PictureBox1.BackgroundImage)
    24. For y = 0 To bitmap.Height - 1
    25. For x = 0 To bitmap.Width - 1
    26. If bitmap.GetPixel(x, y).ToArgb = Color.White.ToArgb Then
    27. MessageBox.Show("Gefunden!")
    28. Exit Sub
    29. End If
    30. Next
    31. Next
    32. End Sub
    33. End Class
    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!