Meine AppleScript-App muss die Pixelfarbe in den Koordinaten 123, 456 auf dem Bildschirm anzeigen.
Meine AppleScript-App muss die Pixelfarbe in den Koordinaten 123, 456 auf dem Bildschirm anzeigen.
Antworten:
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 ffffff
für Weiß.
Der screencapture
Befehl erstellt einen 1x1-Screenshot der Koordinaten und gibt ihn im bmp-Format an einen temporären Speicherort aus.
Der xxd
Befehl 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 sed
Befehl 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
.
Möglich, aber nur, wenn Sie mehrere Ereignisse verketten:
do shell script "screencapture -l" & windowid & " ~/test.png"
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.