Farbwerb von bis suchen

  • VB.NET

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

    Farbwerb von bis suchen

    Hallo ich möchte ein Programm machen das über die Cam einen farbwert sucht und wenn dieser vorhanden ist soll ein label den wert "1" haben ansonsten "0"
    jetzt habe ich bereits das grundgerüst fertig also einfach die webcam wird in einer picturebox angezeigt das bild erneuert sich jede sekunde.

    Jetzt ist es jedoch so das es in meinem zimmer nicht immer gleich hell ist. Und daher will ich meinem programm übergeben das der farbwert auch zwischen hell/dunkel sich bewegen kann.

    Den Pixel suche ich indem ich den code verwende

    VB.NET-Quellcode

    1. Dim BMAP As Bitmap = Me.PictureBox1.BackgroundImage
    2. If BMAP.GetPixel(PictureBox1.Parent.Height, PictureBox1.Parent.Width) = New Color().FromArgb(255, 0, 0, 0) Then
    3. label1.text = "1"
    4. Else
    5. label1.text = "0"
    6. End If


    Und daher will ich meinem programm "sagen" such einen farbwert zwischen den farben (beispiel) Grau (255,161,161,161) -> Schwarz(255, 0, 0, 0)

    hoffe ihr könnt mir da helfen

    mfg Eragon276

    SystemUnknow schrieb:

    in schleife alle pixel durchlaufen und mit gewünschte farbwerte vergleichen


    also immer den roten farbwert +1 dann den grünen +1 dann den blauen +1 bis ich z.b. von

    10,10,10 -> 15,15,15 bin ? Dauert das nicht um einiges zu lange ? da ich ja dann die werte

    11,10,10 -> 11,11,10 -> 11,11,11
    12,11,11 -> und so weiter habe ? und später fehlen dann die werte wie man jetzt schon an der reihenfolge erkenne kann z.B. 12,10,10

    ...

    noch andere ideen? oder mir bei der idee weiterhlefne ?

    eragon276 schrieb:

    Dauert das nicht um einiges zu lange ?

    Erstens hast du ja auch die falsche Idee und zweitens dauert bereits .GetPixel viel zu lange.
    DAS [Release] FastBitmapNet ist schon "etwas" schneller. Vermutlich für deinen Zweck insgesamt immer noch zu langsam. Du solltest dich mal mit LockBits beschäftigen und dem byteweisen Auslesen der Bildinformationen. Dann einen intelligenten Algo erstellen der das "vonbis" erledigt und du bist durch. Alternativ mal in AForge.Net schauen, obs da sowas gibt ...
    hey, das ganze mit lockbits gibt es auch in einer fertigen Lib hier im Forum: [Beta] FastGraphicsLib 1.0.0.5

    das gute ist, dass die funktionen getpixel und setpixel auf lockbits-basis realisiert wurden - also verdammt schnell sind! Die lib beinhaltet auch weitere funktionen - vom namen her würde ich darau schließen, dass eine genau das tut was du brauchst.

    ansonsten einfach die fastgraphics-bitmap pixel für pixel durchlaufen und prüfen ob der ziel-R-wert größer ist als die untere schwelle und kleiner als die obere. sinngemäß das gleihce für die G und B werte.

    lg

    eragon276 schrieb:

    VB.NET-Quellcode

    1. If BMAP.GetPixel(PictureBox1.Parent.Height, PictureBox1.Parent.Width) = New Color().FromArgb(255, 0, 0, 0) Then

    Möglicherweise knallt dieser Aufruf, falls Du Dich zu weit aus dem Fenster gelehnt hast.
    Ich kenne jetzt nicht die Bereiche von BMAP und PictureBox1.Parent.
    Also: GGf, die richtigen Bereiche holen.
    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!