Jak uzyskać kolor piksela na współrzędnych 123, 456 na ekranie?

2

Moja aplikacja AppleScript musi uzyskać kolor piksela na współrzędnych 123, 456 na ekranie.

tagliatelle
źródło

Odpowiedzi:

6

Znalazłem sposób, aby to zrobić, używając tylko wbudowanych komponentów:

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/'"

Wyjście jest na przykład kolorem szesnastkowym, ffffff na biały.

The screencapture polecenie wykonuje zrzut ekranu współrzędnych 1x1 i wysyła go w formacie bmp do tymczasowej lokalizacji.

The xxd komenda odczytuje 3 bajty z tego pliku przy przesunięciu 54. 54 to długość nagłówka w wygenerowanym pliku bmp, a następne 3 bajty to kolor piksela.

The sed polecenie zamienia pierwsze dwa znaki wyjścia z dwoma ostatnimi. Dzieje się tak dlatego, że bmp przechowuje kolory w odwrotnej kolejności niż normalne - BBGGRR. To polecenie zamienia kolejność na normalną RRGGBB.

Chris Vasselli
źródło
Niech cię szlag trafi za moją odpowiedź. Ładnie wykonane.
jnovack
1

Możliwe, ale tylko jeśli połączymy wiele wydarzeń:

  1. Zrób zrzut ekranu do shell script "screencapture -l" & windowid & " ~/test.png"
  2. Przytnij wokół określonego piksela za pomocą ImageMagick

Wydajność:

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)

Pomysł polega na przycięciu konkretnego piksela, a następnie wyprowadzeniu go do specjalnego formatu txt: z nazwą pliku wyjściowego - co jest oczywiście standardowym wyjściem.

Możesz pominąć biznes -crop 1x1 + X + Y, aby uzyskać listę wszystkich pikseli. Zauważ również, że obraz musi mieć kanał alfa, aby zobaczyć kanał alfa, w przeciwnym razie po prostu nie zostanie uwzględniony.

jnovack
źródło
1
Za każdym razem, gdy myślę, że to najbardziej szalone pytanie, w żaden sposób nikt nie zna odpowiedzi, czy zdarza mi się taka niesamowita odpowiedź, która tylko ją gwoździ. Internetowy FTW!
bmike
Dzięki. Spróbuję tego, ale może Cocoa też to zrobi?
Wątpliwe, że możesz to zrobić natywnie. Chociaż, jeśli to zadziała, byłbym zaszczycony otrzymaniem zielonego pola wyboru dla odpowiedzi :)
jnovack