Wie zu Lesen, die Farbe eines Bildschirm-Pixel
Okay, ich bin auf der Suche nach einer Funktion oder so, Lesen Sie die Farbe eines bestimmten pixels auf meinem monitor, und wenn diese Farbe erkannt wird, wird eine andere Funktion aktiviert wird. Ich Zahl mit RGB. Alle Hilfe dankbar. Danke.
Wollen Sie überwachen den gesamten desktop oder eine bestimmte Anwendung für das pixel ändern?
ein bestimmtes pixel. Wie sagen die pixel 125, 130, ich brauche es, zu warten, bis es erkennt die RGB, die pixel gehen auf einen bestimmten RGB.
Warum brauchen Sie, um dies zu tun? Es scheint, wie es ist eine Art der zugrunde liegenden Grund, dass, wenn du uns ein bisschen mehr Informationen, die wir möglicherweise in der Lage sein, um Ihnen eine bessere Weise, das gleiche zu erreichen. Schreiben Sie ein Spiel und brauchen, um zu bestimmen, Wann zwei Objekte kollidieren? Sind Sie versuchen, herauszufinden, ob ein bestimmtes Programm gestartet wurde?
Es ist für ein Spiel, es ist zwei prüfen, wenn es auf einem bestimmten Bildschirm, und wenn es ist, es startet eine Funktion.
Aber Sie sollten wissen, welchen Bildschirm das Spiel an, wie man die Kontrolle über den code...
ein bestimmtes pixel. Wie sagen die pixel 125, 130, ich brauche es, zu warten, bis es erkennt die RGB, die pixel gehen auf einen bestimmten RGB.
Warum brauchen Sie, um dies zu tun? Es scheint, wie es ist eine Art der zugrunde liegenden Grund, dass, wenn du uns ein bisschen mehr Informationen, die wir möglicherweise in der Lage sein, um Ihnen eine bessere Weise, das gleiche zu erreichen. Schreiben Sie ein Spiel und brauchen, um zu bestimmen, Wann zwei Objekte kollidieren? Sind Sie versuchen, herauszufinden, ob ein bestimmtes Programm gestartet wurde?
Es ist für ein Spiel, es ist zwei prüfen, wenn es auf einem bestimmten Bildschirm, und wenn es ist, es startet eine Funktion.
Aber Sie sollten wissen, welchen Bildschirm das Spiel an, wie man die Kontrolle über den code...
InformationsquelleAutor Brandon | 2009-09-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist die effizienteste: Es packt einen pixel an die Position des Cursors, und der sich nicht auf nur einen monitor.
Nun, offensichtlich, Sie nicht haben, um mit dem cursor die aktuelle Position, sondern das ist die Allgemeine Idee.
EDIT:
Angesichts der oben
GetColorAt
Funktion können Sie Abfragen, ein bestimmtes pixel auf dem Bildschirm in einer sicheren, Leistungs-freundliche Art und Weise, wie diese:Können Sie wickeln, dass in einem Thread, wenn Sie wollen, oder führen Sie es von einer Konsole-Anwendung. "Was auch immer zu Ihrer Stimmung passt," denke ich.
Aber beachten Sie, dass CopyFormScreen undicht wird einem Griff jedes mal, wenn Sie nennen es.
Aktualisiert, um zu verhindern, dass das Leck.
Danke John, diese funktioniert wunderbar, eine andere kurze Frage. Wenn ich will, dass das stetige suchen für Pixel, wie kann ich das erreichen?
Ich weiß, das ist 10 Jahre zu spät, aber falls es jemanden interessiert, die Antwort auf @Brandon Frage: ich habe einen timer, legen Sie ein Intervall für alle 250ms (oder wie schnell Sie wollen, es zu suchen), und klicken Sie dann auf der timer_tick tun, das eigentliche Lesen. link
InformationsquelleAutor John Gietzen
Meisten Antworten hier verwenden Sie die gleiche Quelle, dass die pixel (desktop dc).
Die Funktion der Taste ist
GetPixel
.Ich denke, dies ist die sauberste und Schnellste Art und Weise.
Hinweis:
Wenn Sie geändert haben, der Standard-text-Größe unter den Anzeige Einstellungen auf Windows um die Lesbarkeit zu erhöhen, die auf ein display mit hoher Auflösung, die Koordinate Parameter der GetPixel() angepasst werden müssen, um die gleiche Weise. Zum Beispiel, wenn der cursor-Position (x,y) mit 150% der Schriftgröße von Windows 7, müssen Sie rufen GetPixel(x*1.5, y*1.5), um die Farbe des pixels unter dem cursor.
+1 für den Hinweis auf die text-Größe auf dem display. Wenn es einen anderen text, andere Größe als 100% und es ist nicht richtig angepasst, die Methode erhalten Farben aus der falschen Pixel.
InformationsquelleAutor Bitterblue
Bitte überprüfen Sie diese zwei verschiedenen Funktionen habe ich in einem meiner früheren Projekte :
1) Diese Funktion nimmt Schnappschuss von Desktop -
2) Diese Funktion nimmt ein Bild in input und berechnet die RGB-Durchschnitt von pixel-Bereich gegeben.
Diese beiden Funktionen zusammen, könnte Ihr problem lösen. Happy Coding 🙂
BEARBEITEN : Bitte beachten Sie, dass GetPixel ist sehr langsam-Funktion. Ich werde zweimal überlegen, bevor Sie es verwenden.
InformationsquelleAutor MRG
Diese Funktion ist kürzer und erreicht das gleiche Ergebnis mit
System.Drawing
ohne Pinvoke.InformationsquelleAutor J3soon
Soweit ich weiß, der einfachste Weg, dies zu tun ist, um:
Bearbeiten
Gibt es wohl keine Möglichkeit zu "warten", bis die pixel-Veränderungen, die auf eine bestimmte Farbe. Das Programm wird wahrscheinlich nur Schleife und überprüfen Sie es jeder so oft, bis es sieht in der Farbe.
Beispiel:
EDIT 2
Ist hier einige Beispiel-code, den Sie ändern können. Dieser code ändert nur die Farbe des Etiketts, basierend auf der aktuellen Farbe eines bestimmten pixels. Dieser code verhindert das handle-Leck erwähnt.
}
Dann setzen Sie nicht schlafen. Diese Schleife würde wahrscheinlich nehmen Sie alle .1 Sekunden Durchlaufen schlimmsten Fall.
Beachten Sie, dass Sie sollten nicht ausgeführt werden .CopyFromScreen, es hat einen Griff Leckage, das beste ist, um dies zu implementieren, selbst code mit Win32-API
Bitmap.GetPixel()
gibt eineColor
so sehe ich keinen Grund zu nennenToArgb()
und übergeben es inColor.FromArgb()
InformationsquelleAutor tster