Как получить цвет пикселя в координатах 123, 456 на экране?


2

Мое приложение AppleScript должно получить цвет пикселя в координатах 123, 456 на экране.

Ответы:


6

Я нашел способ сделать это, используя только встроенные компоненты:

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

Выводим цвет в шестнадцатеричном виде, например, ffffff для белых.

screencapture Команда делает снимок координат 1x1 и выводит его в формате bmp во временную папку.

xxd Команда читает 3 байта из этого файла со смещением 54. 54 - длина заголовка в сгенерированном файле bmp, а следующие 3 байта - цвет пикселя.

sed Команда заменяет первые два символа вывода на последние два. Это потому, что bmp хранит цвета в обратном порядке: BBGGRR, Эта команда меняет порядок на нормальный RRGGBB,


Черт бы побрал мой ответ. Красиво сделано.
jnovack

1

Возможно, но только если вы объедините несколько событий:

  1. Сделать скриншот do shell script "screencapture -l" & windowid & " ~/test.png"
  2. Обрезать вокруг определенного пикселя, используя ImageMagick

Выход:

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)

Идея состоит в том, чтобы обрезать вокруг определенного пикселя, а затем вывести его в специальный формат txt: с именем выходного файла - что, конечно, является стандартным выводом.

Вы можете опустить бизнес -crop 1x1 + X + Y, чтобы получить список всех пикселей. Также обратите внимание, что ваше изображение должно иметь альфа-канал, чтобы увидеть альфа-канал, иначе он просто не будет включен.


1
Каждый раз, когда я думаю, что это самый сумасшедший вопрос, который ни в коем случае не будет знать ответ, я случайно не получу такой потрясающий ответ, который просто пригвоздит его Интернет FTW!
bmike

Благодарю. Я попробую это, но, может быть, Какао тоже сможет это сделать?

Сомнительно, что вы можете сделать это изначально. Хотя, если это сработает для вас, для меня будет честью получить зеленый флажок для ответа :)
jnovack
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.