Выбор цвета в скрипте

  • Автор темы Автор темы Solnushka
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Solnushka

Участник
Топикстартер
Сообщения
24
Реакции
0
Здравствуйте!
И опять скрипты.
На этот раз требуется создать интерфейс, в котором будет находиться что-то вроде цветовой палитры. И можно будет выбрать цвет изображения просто щелкнув по квадратику нужного цвета.
Либо, вызывать палитру, нажатием на кнопку.
Это возможно?

Я нашла примерное решение, но там цвет задается цифровыми значениями RGB. А интересует меня именно "тыканье" в образец цвета, а не "вписывание" числового эквивалента.

Если кто-то знает осуществимо ли это - подскажите, буду очень благодарна.
 
Ответ: Выбор цвета в скрипте

для тыканья нужен colordialog, оно есть в дельфях, vb.net и т.д. Но сомневаюсь, что его можно будет вызвать через VBS/JSX.
 
Ответ: Выбор цвета в скрипте

Как насчет явы не в курсе, но в винде есть встроенный диалог выбора цвета в составе Common Dialog Controls. Но я не знаю позволяет ли фотошопский интерпрентатор вызывать API-функции Винды.

Стандартно: раскрашиваете элементы управления (controls) типа кнопок или там меток для которых программируете событие Click. Юзер щелкает - в скрип по прерыванию события отправляются данные о том, какой элемент выбрал юзер. Поскольку каждому элементу заранее сопоставлен какой-то цвет, то вы его непосредственно и получаете в коде обработки события Click по индексу* элемента.

Изобразить рампу по типу той которая внизу палитры Colors можно с помощью включенного в интерфейс растра и события Click с обработкой свойств X и Y - то есть двумерных координат позиции указателя мыши относительно окна элемента управления в которое загружен растр изображающий рампу.

В CS3, писали, программируется Color Dialog, кстати.

Чтобы не вводить уровни RGB вручную, можно предусмотреть движки как на рисунке внизу. Это с моей апликухи снимок. Как видите есть простейшая палитра из основных и дополнительных цветов, белого и черного - это чтобы быстро устанавливать наиболее распространенные цвета. А движками затем корректируете.
 

Вложения

  • colordlg.jpg
    colordlg.jpg
    13.5 КБ · Просм.: 860
Ответ: Выбор цвета в скрипте

* насчет индексов. Создаете элементы управления собранные в массив. Адресация при этом идет через общее имя объектной переменной и ее индекса в массиве. Тогда событие Click (как и прочие события) вызывается любым элементом массива и обрабатывается одним и тем же кодом. Распознать какой именно элемент вызвал событие можно по полученному индексу активного элемента.

Если вы будете использовать натурально те же самые RGB значения которыми будете раскрашивать элементы управления, то распознавать индексы вообще вам не понадобится, их можно будет использовать латентно: в подпрограмме обработки события вы получаете переменную Index (или как там на яве) и втыкаете ее в ссылку на объект свойства раскраски которого вы хотите получить.

Например юзер ткнул на 18-ю метку которая раскрашена 00ffa0. В подпрограмме обработки события Click вы вставляете ровно одну строчку, типа: myColor = colorLabel(Index).Color, где: myColor - переменная в которую валится выбранный цвет; colorLabel - элемент управления из массива заранее имеющий заранее заданный цвет фона; Index - агрумент подпрограммы Click получаемый от интерпрентатора (на яве это надо самостоятельно описывать - геморрой) и указывающий на активный элемент в массиве; Color - условное название свойства элемента управления характеризующее цвет его фона.
 
Ответ: Выбор цвета в скрипте

Понятно, спасибо за такой подробный ответ.
Скриншот, который вы прикрепили - это наглядный пример того, что мне нужно получить посредством ява скрипта. У вас Бэйсик, если я не ошибаюсь? :)

Я тоже думала про вариант с раскрашенными метками, каждой из которых присвоено значение, но тогда получается, что выбор цветов ограничен.

Ваше решение - оптимально для меня. Будем "тыкать" :)

В CS3, писали, программируется Color Dialog, кстати.

Я не совсем поняла что вы хотели этим сказать - где писали и на чем программируется ?

Пасибо за уделенное внимание к проблеме.
 
Ответ: Выбор цвета в скрипте

Я ошибся, не Color Dialog - а Color Picker. Стандартный шопский диалог выбора цвета. Писали в обзорах что этот пикер в ЦС3 программируется из скрипта. То есть его можно вызвать, показать юзеру, юзер выберет цвет, диалог вернет данные. У меня нет ЦС3, так что проверьте по документации на скриптинг если у вас есть.

Я тоже думала про вариант с раскрашенными метками, каждой из которых присвоено значение, но тогда получается, что выбор цветов ограничен.
Если поллитра будет загружаться из файла в момет запуска скрипта, то ограничения только по интерпрентатору. Вы ведь можете наплодить столько "контролсов" в ран-тайм - сколько их указано наплодить в файле поллитры. То есть ее надо не зашивать в коды скрипта, а сделать загружаемую из файла.

Опять же, в яве я интерфейсы не делал, но не думаю что там нельзя угнездить элементы управления в другой элемент управления имеющий свойство прокрутки своего окна - чтобы прокручивать свернутую палитру если она не влезет в отведенное место.

На самом деле у меня была совершенно другая проблема: компутерные RGB ведь никакого отношения не имеют к реальным. А уж тем более абстрактный CMYK не имеет.

Если читаете по-английски сходите на этот сайт: http://ps-scripts.com/bb/

Да, мои апликухи на Басике.
 
Ответ: Выбор цвета в скрипте

Я с этого сайта не слезаю последние пару дней :) Замечательный ресурс - если бы не он, то вопросов к вам было бы намного больше :)

Про Color Picker тоже вариант. Поищем, как энто делается - по идее должно быть еще проще.

А то, что палитра загружается из файла - об этом можно поподробнее? По рабоче-крестьянски: существует возможность создать файл с палитрой? Я совсем неопытный программер в этой области, поэтому не перестаю удивляться возможностям ява скрипта в шопе.
Я поищу сейчас информацию о палитрах, но если не затруднит - может у вас есть ссылка либо простенький примерчик.

Как всегда, большое вам спасибо за участие и помощь!
 
Ответ: Выбор цвета в скрипте

Нашла ColorPicker - красота!
Две строки кода - и полноценное шоповское окно во всей красе со всеми оттенками готово :)

Вы обмолвились о том, что встречаетесь с проблемой несоответствия цветовых моделей компутера и печатных. А как с этим боретеся? :)
 
Ответ: Выбор цвета в скрипте

Как я понимаю, в Color Picker'е цвета отображаются в соответствии с выбранными профилями для RGB, CMYK, Gray. Но если вы захотите раскрасить метку в окне скрипта в тот цвет, который соответствовал бы его отображению в документе, вам как-то придется осуществлять конвертирование уровней в соответствии с рабочим профилем (или того хуже - профилем документ) самостоятельно. Для RGB это может быть не критично, а для CMYK математический пересчет в RGB неминуемо приводит к чудовищным отличиям. Поэтому мне пришлось написать функцию которая единовременно прогоняет все возможные CMYK-значения с шагом 10% (с шагом 1% это более 4 миллиардов, то есть 4 гигабайта) через ФШ и записывает RGB эквиваленты в бинарный файл из которого програ и берет правильные RGB для раскраски фона двух кнопок, подразумевая что настройки ФШ не изменились. Разумеется профиль документа игнорируется. Проблема ведь не только в профиле - но в настройках самого ФШ которые влияют на отображение цветов.


Что касается загрузки палитры из файла - тут вообще никаких проблем быть не должно. Создаете новую ссылку на объект File, связываете ее с имеющимся файлом проверив этот факт свойством exist (или exists, не помню), затем читаете все его содержимое в массив и пользуйтесь этим массивом как угодно.
 
Ответ: Выбор цвета в скрипте

Color Picker отображает цвета в RGB. По моему, только в RGB. По крайней мере, так Scripting Guide утверждает. Довольно лаконично, кстати, там о Color Picker написано. Очень не хватает, по-моему, в нете примеров использования функций и объектов для скриптинга в шопе. Почему-то у нас очень мало народу, который бы этим занимался.

То что делаете вы, для меня вообще, если честно, кажется чем-то из разряда высшей математики. Дай мне бог, когда-нибудь обрести такое же понимание и знание графики. Если не секрет, сколько времени вы уже этим занимаетесь?
 
Ответ: Выбор цвета в скрипте

То есть Color Picker не возвращает CMYK и споты, только RGB?

Не знаю как насчет высшей математики, но если вы попробуете поискать хороший сырец на яве для применения в скрипте для Фотошопа, вы можете немедленно наткнуться на такую проблему, что многие известные явовские функции просто не поддерживаются фотошопским компилятором. Поэтому искать сырцы придется там, где пишут именно для Фотшопа. Ну и напоследок приятное - с каждой новой версией возможности компилятора меняются, поэтому скрипты становятся версия-зависимые, равно как и платформо-зависимые, потому что глюки скриптинга на маке и на пэцэ - всегда разные и уникальные.

Я пишу на басике, поскольку без чтения всякой документации можно понять какие есть свойства у объекта, какие методы и тут же их проверить. Прямо в окне дебуггера. Набираем, например: Photoshop.Documents.Add 600, 500, 72 жмем Enter и смотрим как в ФШ создается новый документ заданных параметров.

Поэтому для меня героями являются люди которые пишут на яве. У меня написание простенького скрипта выливается в пару часов чтения документации и отлова ошибок, половина из которых - орфографические.
 
Ответ: Выбор цвета в скрипте

:) Да ладно, не скромничайте. Не поверю :)
Да, вы знаете, ColorPicker возвращает только RGB, по-моему. Я думаю, что это временно. Все-таки первый блин.
Ага, сырцы для фотошопа - к примеру, по ColorPicker-у в сети можно найти 1 (!) пример буржуинский (который в реальности пришлось переписывать). В CSGuide всего 4 строчки по этой теме. Не хватает пока документации. Зато лет через 20 мы будем гордо называть себя первопроходцами по скриптингу в шопе :)

Бэйсик, конечно, проще и понятнее.
Зато ява более классическая - начинать именно с нее, по-моему, надо. Пока руку на всех заморочках себе не набьешь.
 
Ответ: Выбор цвета в скрипте

Solnushka сказал(а):
Зато лет через 20...

Бэйсик, конечно, проще и понятнее.
Зато ява более классическая - начинать именно с нее, по-моему, надо. Пока руку на всех заморочках себе не набьешь.
Через 20 лет... ну ладно, ближе к пенсии посмотрим :)
VB(S) и JS (не Java) почти равны, применительно к скриптингу. Есть небольшие отличия и часто в пользу JS (ассоциативные массивы, eval и т.д.). А начинать надо с того, что проще. Можно и с VB, чтобы понять объектную модель и прочие штуки, а потом перейти на JS.

По теме: можно, чтобы юзер выбрал цвет (foreground) и дальше использовать эти значения.
 
Ответ: Выбор цвета в скрипте

А начинать надо с того, что проще.
Полностью с вами согласна - тут в принципе не может быть однозначного мнения. Субъективно все очень.

можно, чтобы юзер выбрал цвет (foreground) и дальше использовать эти значения
Пардон, а поподробнее алгоритм?

Проблема в принципе решена использованием ColorPicker-а. Но если есть какой-нибудь другой метод, было бы интересно узнать.
 
Ответ: Выбор цвета в скрипте

Solnushka сказал(а):
Пардон, а поподробнее алгоритм?
Проблема в принципе решена использованием ColorPicker-а. Но если есть какой-нибудь другой метод, было бы интересно узнать.
в phs есть foregroundColor (SolidColor) [cmyk,lab,rgb..] можно просить юзера выбрать там цвет и читать значения в нужной цветовой модели.
 
Ответ: Выбор цвета в скрипте

Каким способом попросить юзера?
в phs есть foregroundColor (SolidColor) [cmyk,lab,rgb..]
Да, это понятно.
Задача в том, чтобы из диалогового окна, которое создается при запуске скрипта, юзер мог нажать на кномпочку - а там ему палитра выскакивает (созданная ручками, из файла, или ColorPicker). Нажимает на понравившийся цвет. Цвет присваивается переменной.rgb.hexvalue. И потом скриптом этот цвет используется.

Вы, как я поняла, просто хотели указать на возможность работы в разных цветовых моделях. Или я ошибаюсь?
 
Ответ: Выбор цвета в скрипте

Solnushka сказал(а):
Нажимает на понравившийся цвет. Цвет присваивается переменной.rgb.hexvalue. И потом скриптом этот цвет используется.

Вы, как я поняла, просто хотели указать на возможность работы в разных цветовых моделях. Или я ошибаюсь?
У меня CS2 (пока), поэтому проверить работу "$.colorPicker();" в cs3 нет возможности.

Да, например, юзер может указать для foregroundcolor (FC) в Color Picker, след. знач. CMYK 1/2/3/98. Этим значениям будут соответствовать RGB значения (например, 37/36/39). Foregroundcolor.cmyk содержит "оригинальные" значения CMYK. Если же юзер сразу укажет RGB значения 37/36/39, то в FC.CMYK будут значения с учетом профайла (например 81/64/58/68).
 
Ответ: Выбор цвета в скрипте

Если говорить о корнях, то классика это Си. А давайте представим что вам нужен текстовый интерфейс, то есть иерархия меню, ведь нормальную прогру на одном графическом не построить. Или хочется связать скрипт с базой данных или, не дай бог - электронной таблицей через ODBC. Поэтому фотошопские скрипты на яве это именно скрипты. Писать с их помощью приложение - смысла нет. Хотя, конечно, ява романтичнее вульгарного Бейсика, спору нет.

Да, похоже colorpicker возвращает тупо hex. Забавно что в документации (я скачал пидиэф) написано по этому поводу похоже ровно столько, сколько будет написано в описании объекта в обжект бровзере. Интересно, а это случайно там не вызывается виндовый диалог выбора цвета - ну, который в составе Common Dialogs? Как выглядит Color Picker вызываемый в ФШ - как фотошопский?
 
Ответ: Выбор цвета в скрипте

Не по теме. По большому счету я и не перешел на ЦС3 в свое время, поскольку новые возможности не перевесили возможных исправлений всех скриптов и программ для этой версии. Ни разу с тех пор как появился скриптинг программы не работали с новой версией ФШ также, как со старой, хотя по идее совместимость снизу вверх должна торчать канонически. То они значения констант поменяют, то глюки полезут каких не было, то свойства старых объектов изменяет предлагая использовать новые объекты. Помню как переписывал туеву хучу кодов с Layer на ArtLayer. Так вот, могу себе представить как это все отлавливать в сиротском фотошопном дебуггере с сиротским alert'ом явы.

Что касается соответствия цветов в интерфейсе и в документе - проблема именно в том, что цветовые настройки ФШ не сохраняются в цветовом профиле и вообще могут быть не сохранены в файле настроек. Поэтому чтобы их учитывать придется ковырять собственно файл настроек ФШ или какой-то там временный файл его цветовых настроек. Геморрой, в общем. Поэтому если вас не волнует идентичность отображения цветов, то можете забить на эту проблему вообще.

Посмотрел что в бесплатном SDK - точно, есть исходники для Color Picker'а. На Си, разумеется.
 
Ответ: Выбор цвета в скрипте

Интересно, а это случайно там не вызывается виндовый диалог выбора цвета
Да, вы знаете - именно он и вызывается.

Насчет конфликта версий - странное дело. Интересно, чем разработчики руководствуются, когда производят все эти изменения.

Дурдом полный, по-моему, со всеми этими соответсвиями и несоответствиями цветов. Для меня в данном случае это вообще не принципиально, но представляю сколько мучений они могут доставить.

Придумали бы Адобовцы всего одну цветовую модель, которая была бы удобна во всех отношениях и масса проблем исчезла бы :)
 
Статус
Закрыто для дальнейших ответов.