Eine Farbe in der Picturebox erkennen

  • VB.NET

Es gibt 57 Antworten in diesem Thema. Der letzte Beitrag () ist von MediaXtremely.

    Eine Farbe in der Picturebox erkennen

    Hallo liebe Leute,

    ich möchte gerne in einer Picturebox eine Farbe ermitteln, z.B. die Farbe weiß.

    Wenn weiß in Picturebox vorkommt dann soll eine MsgBox erscheinen.

    Ist ds möglich? Könnt ihr mir helfen?


    Danke schon mal im voraus.

    MediaXtremely schrieb:

    Ja eine weiße stelle
    Und weiß ist reines weiß, also RGB(255,255,255) oder darf es auch einen leichten Grauschleier haben?

    Wie du die Pixel einzeln ausliest und auf Farbe abprüfst kannst du in diesem Beispiel nachlesen:
    techjamaica.com/forums/showthr…472fc&p=580723#post580723
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Sollte es etwa so sein:
    MouseDown -> x, y, PictureBox.Image - Pixel an Stelle x, y abfragen?

    VB.NET-Quellcode

    1. Private Sub PictureBox1_MouseDown(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
    2. Dim img As Bitmap = New Bitmap(PictureBox1.Image)
    3. Dim col = img.GetPixel(e.X, e.Y)
    4. End Sub
    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!
    Ja ich prüfe die ganze Picturebox aber das mit dem weiß will nich klappen...



    Edit:

    Danke funst super!!! Habe es hinbekommen.

    Mit:

    VB.NET-Quellcode

    1. Dim img As Bitmap = New Bitmap(PictureBox1.Image)
    2. Dim col = img.GetPixel(e.X, e.Y)

    lese ich den rgb Code aus und mit dem anderen prüfe ich den dann.

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

    Habe doch noch ein Problem!

    Wenn er einen Weißwert erkennt gibt er jedes mal Alarm. Also für jeden weißen Pixel.
    Ich möchte aber das er das nur einmal macht.

    VB.NET-Quellcode

    1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    2. Dim clr As Integer
    3. Dim xmax As Integer
    4. Dim ymax As Integer
    5. Dim x As Integer
    6. Dim y As Integer
    7. ' Get the bitmap and its dimensions.
    8. Dim bm As Bitmap = PictureBox2.Image
    9. xmax = bm.Width - 1
    10. ymax = bm.Height - 1
    11. ' read the pixels
    12. For y = 0 To ymax
    13. For x = 0 To xmax
    14. With bm.GetPixel(x, y)
    15. clr = .R & .G & .B
    16. If clr = "255255255" Or clr = "240240255" Or clr = "238238255" Or clr = "236236255" Or clr = "234234255" Or clr = "232232255" Or clr = "230230255" Or clr = "228228255" Or clr = "226226255" Or clr = "224224255" Or clr = "222222255" Or clr = "220220255" Or clr = "218218255" Or clr = "216216255" Or clr = "214214255" Or clr = "212212255" Or clr = "210210255" Or clr = "208208255" Or clr = "206206255" Or clr = "204204255" Or clr = "202202255" Or clr = "200200255" Or clr = "198198255" Or clr = "196196255" Or clr = "194194255" Or clr = "192192255" Or clr = "190190255" Or clr = "188188255" Or clr = "186186255" Or clr = "184184255" Or clr = "182182255" Or clr = "180180255" Or clr = "178178255" Or clr = "176176255" Or clr = "174174255" Or clr = "172172255" Or clr = "170170255" Or clr = "168168255" Or clr = "166166255" Or clr = "164164255" Or clr = "162162255" Or clr = "160160255" Or clr = "158158255" Then
    17. My.Computer.Audio.Play(Application.StartupPath & "/60.wav", AudioPlayMode.Background)
    18. End If
    19. End With
    20. Next x
    21. Next y
    22. End Sub

    VB.NET-Quellcode

    1. Dim flag As Boolean = True
    2. ' ...
    3. If flag Then
    4. My.Computer.Audio.Play(Application.StartupPath & "/60.wav", AudioPlayMode.Background)
    5. End If
    6. flag = False
    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!
    Ich verstehe das nicht ganz.

    Ich habe es versucht und jetzt ein Beispiel:

    VB.NET-Quellcode

    1. For y = 0 To ymax
    2. For x = 0 To xmax
    3. With bm.GetPixel(x, y)
    4. clr = .R & .G & .B
    5. Dim flag As Boolean = True
    6. If clr = "255255255" Or clr = "240240255" Or clr = "238238255" Or clr = "236236255" Or clr = "234234255" Or clr = "232232255" Or clr = "230230255" Or clr = "228228255" Or clr = "226226255" Or clr = "224224255" Or clr = "222222255" Or clr = "220220255" Or clr = "218218255" Or clr = "216216255" Or clr = "214214255" Or clr = "212212255" Or clr = "210210255" Or clr = "208208255" Or clr = "206206255" Or clr = "204204255" Or clr = "202202255" Or clr = "200200255" Or clr = "198198255" Or clr = "196196255" Or clr = "194194255" Or clr = "192192255" Or clr = "190190255" Or clr = "188188255" Or clr = "186186255" Or clr = "184184255" Or clr = "182182255" Or clr = "180180255" Or clr = "178178255" Or clr = "176176255" Or clr = "174174255" Or clr = "172172255" Or clr = "170170255" Or clr = "168168255" Or clr = "166166255" Or clr = "164164255" Or clr = "162162255" Or clr = "160160255" Or clr = "158158255" Then
    7. End If
    8. If flag Then
    9. My.Computer.Audio.Play(Application.StartupPath & "/60.wav", AudioPlayMode.Background)
    10. End If
    11. flag = False
    12. End With
    13. Next x
    14. Next y

    MediaXtremely schrieb:

    Ich verstehe das nicht ganz.

    VB.NET-Quellcode

    1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    2. Dim clr As Integer
    3. Dim xmax As Integer
    4. Dim ymax As Integer
    5. Dim x As Integer
    6. Dim y As Integer
    7. Dim flag As Boolean = True
    8. ' Get the bitmap and its dimensions.
    9. Dim bm As Bitmap = PictureBox2.Image
    10. xmax = bm.Width - 1
    11. ymax = bm.Height - 1
    12. ' read the pixels
    13. For y = 0 To ymax
    14. For x = 0 To xmax
    15. With bm
    16. clr = .GetPixel(x, y).ToArgb
    17. If clr = &HFFFFFF Then ' hier noch erweitern
    18. If flag Then
    19. My.Computer.Audio.Play(Application.StartupPath & "/60.wav", AudioPlayMode.Background)
    20. End If
    21. flag = False
    22. End If
    23. End With
    24. Next x
    25. Next y
    26. End Sub
    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!
    So es funktioniert aber einen kleinen Haken gibt es noch...


    Wenn ich die Schleife durchlaufen lasse, geht er durch alle if schleifen auch du das else..
    Ich habe jetzt schon viel rumprobiert aber nichts hilft. Was mache ich falsch?

    VB.NET-Quellcode

    1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    2. Dim clr As Integer
    3. Dim xmax As Integer
    4. Dim ymax As Integer
    5. Dim x As Integer
    6. Dim y As Integer
    7. Dim flag As Boolean = True
    8. Dim flag3 As Boolean = True
    9. Dim flag5 As Boolean = True
    10. ' Get the bitmap and its dimensions.
    11. Dim bm As Bitmap = PictureBox2.Image
    12. xmax = bm.Width - 1
    13. ymax = bm.Height - 1
    14. ' read the pixels
    15. For y = 0 To ymax
    16. For x = 0 To xmax
    17. With bm.GetPixel(x, y)
    18. clr = .R & .G & .B
    19. If clr = "1920192" = True Or clr = "12911128" = True Or clr = "107049" = True Or clr = "1280128" = True Or clr = "16900" = True Or clr = "100044" = True Or clr = "871895" = True Or clr = "1623774" = True Or clr = "25500" = True Or clr = "25100" = True Or clr = "24700" = True Or clr = "24300" = True Or clr = "23900" = True Or clr = "23500" = True Or clr = "23100" = True Or clr = "22700" = True Or clr = "22300" = True Or clr = "21900" = True Or clr = "21500" = True Or clr = "21100" = True Or clr = "20700" = True Or clr = "20300" = True Or clr = "19900" = True Or clr = "19500" = True Or clr = "19100" = True Or clr = "18700" = True Or clr = "18300" = True Or clr = "17900" = True Or clr = "17500" = True Or clr = "17100" = True Or clr = "16700" = True Or clr = "16300" = True Or clr = "15900" = True Or clr = "15500" = True Or clr = "15100" = True Or clr = "14700" = True Or clr = "14300" = True Or clr = "13900" = True Or clr = "13500" = True Or clr = "13100" = True Then
    20. If flag Then
    21. My.Computer.Audio.Play(Application.StartupPath & "/Signal/05.wav", AudioPlayMode.Background)
    22. End If
    23. flag = False
    24. Else
    25. If clr = "00200" = True Or clr = "22137" = True Or clr = "2626177" = True Or clr = "0088" = True Or clr = "7070214" = True Or clr = "88128" = True Or clr = "00190" = True Or clr = "22136" = True Or clr = "00180" = True Or clr = "00170" = True Or clr = "00160" = True Or clr = "00150" = True Or clr = "00140" = True Or clr = "00130" = True Or clr = "00120" = True Or clr = "00110" = True Then
    26. If flag3 Then
    27. My.Computer.Audio.Play(Application.StartupPath & "/Signal/03.wav", AudioPlayMode.Background)
    28. End If
    29. flag3 = False
    30. Else
    31. If clr = "255255255" = True Or clr = "240240255" = True Or clr = "238238255" = True Or clr = "236236255" = True Or clr = "234234255" = True Or clr = "232232255" = True Or clr = "230230255" = True Or clr = "228228255" = True Or clr = "226226255" = True Or clr = "224224255" = True Or clr = "222222255" = True Or clr = "220220255" = True Or clr = "218218255" = True Or clr = "216216255" = True Or clr = "214214255" = True Or clr = "212212255" = True Or clr = "210210255" = True Or clr = "208208255" = True Or clr = "206206255" = True Or clr = "204204255" = True Or clr = "202202255" = True Or clr = "200200255" = True Or clr = "198198255" = True Or clr = "196196255" = True Or clr = "194194255" = True Or clr = "192192255" = True Or clr = "190190255" = True Or clr = "188188255" Or clr = "186186255" = True Or clr = "184184255" = True Or clr = "182182255" = True Or clr = "180180255" = True Or clr = "178178255" = True Or clr = "176176255" = True Or clr = "174174255" = True Or clr = "172172255" = True Or clr = "170170255" = True Or clr = "168168255" = True Or clr = "166166255" = True Or clr = "164164255" = True Or clr = "162162255" = True Or clr = "160160255" = True Or clr = "158158255" = True Then
    32. If flag5 Then
    33. My.Computer.Audio.Play(Application.StartupPath & "/Signal/01.wav", AudioPlayMode.Background)
    34. End If
    35. flag5 = False
    36. clr = False
    37. End If
    38. End If
    39. End If
    40. End With
    41. Next x
    42. Next y
    Option Strict On
    Mach malo so einen If-Konstrukt:

    VB.NET-Quellcode

    1. If clr = &HCC Then
    2. ElseIf clr = &H200 Then
    3. ElseIf clr = &HFFFFFF Then
    4. End If
    dann noch Option Strict On
    und in die Un-Zeile

    VB.NET-Quellcode

    1. clr = .R & .G & .B
    einen Haltepunkt. Sieh Dir clr an.
    Und Option Strict On
    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!
    Bei Local steht das Clr 0 Integer..

    Egal was ich mache es geht die ganze schleife durch.


    Edit:

    Bei Option Strict On

    Zeigt er mir fehler an er will das

    VB.NET-Quellcode

    1. clr = .R & .G & .B


    in

    VB.NET-Quellcode

    1. CInt
    2. clr = .R & .G & .B


    umwandeln.

    Das habe gemacht und die String in Integer umgewandelt.

    Trotzdem das gleiche Problem..

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