Wie erhält man die Farbe des Pixels in den Koordinaten 123, 456 auf dem Bildschirm?

3

Meine AppleScript-App muss die Pixelfarbe in den Koordinaten 123, 456 auf dem Bildschirm anzeigen.

Tagliatelle
quelle

Antworten:

7

Ich habe einen Weg gefunden, dies nur mit eingebauten Komponenten zu tun:

do shell script "screencapture -R123,456,1,1 -t bmp $TMPDIR/test.bmp && \
                 xxd -p -l 3 -s 54 $TMPDIR/test.bmp | \
                 sed 's/\\(..\\)\\(..\\)\\(..\\)/\\3\\2\\1/'"

Ausgabe ist die Farbe in hexadezimaler Darstellung, beispielsweise fffffffür Weiß.

Der screencaptureBefehl erstellt einen 1x1-Screenshot der Koordinaten und gibt ihn im bmp-Format an einen temporären Speicherort aus.

Der xxdBefehl liest 3 Bytes aus dieser Datei bei Versatz 54. 54 ist die Länge des Headers in der erzeugten BMP-Datei und die nächsten 3 Bytes sind die Farbe des Pixels.

Der sedBefehl tauscht die ersten beiden Zeichen der Ausgabe gegen die letzten beiden aus. Dies liegt daran, dass der bmp die Farben in umgekehrter Reihenfolge speichert - BBGGRR. Dieser Befehl wechselt die Reihenfolge zur normalen Reihenfolge RRGGBB.

Chris Vasselli
quelle
1
Verdammt, dass du meine Antwort übertrumpft hast. Schön gemacht.
JNOVACK
1

Möglich, aber nur, wenn Sie mehrere Ereignisse verketten:

  1. Mach ein Bildschirmfoto do shell script "screencapture -l" & windowid & " ~/test.png"
  2. Schneiden Sie mit ImageMagick um ein bestimmtes Pixel

Ausgabe:

convert ~/test.png -crop 1x1+123+456 txt:-
# ImageMagick pixel enumeration: 1,1,255,rgba
0,0: (  0, 74,117,251)  #004A75FB  rgba(0,74,117,0.984314)

Die Idee ist, ein bestimmtes Pixel zu beschneiden und es dann im speziellen txt: -Format mit dem Namen der Ausgabedatei - auszugeben, was natürlich die Standardausgabe ist.

Sie können das Geschäft -crop 1x1 + X + Y weglassen, um nur eine Auflistung aller Pixel zu erhalten. Beachten Sie auch, dass Ihr Bild einen Alphakanal haben muss, um den Alphakanal sehen zu können, da er sonst einfach nicht aufgenommen wird.

jnovack
quelle
1
Jedes Mal, wenn ich denke, dass dies die verrückteste Frage ist, auf die niemand eine Antwort finden kann, stoße ich auf eine großartige Antwort wie diese, die es nur nagelt. Internet FTW!
bmike
Vielen Dank. Ich werde es versuchen, aber vielleicht könnte Cocoa das auch?
Zweifelhaft, dass Sie es von Haus aus können. Obwohl, wenn es für Sie funktioniert, wäre ich geehrt, ein kleines grünes Kontrollkästchen für die Antwort zu bekommen :)
jnovack