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


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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.