Определить цвет

Статус
Закрыто для дальнейших ответов.

Tuomas

Участник
Топикстартер
Сообщения
15
Реакции
0
Необходимо поработать с цветом в иллюстраторе.
Определить цвет заливки векторных объектов, цвет пикселя (можно через пипетку) растровых объектов (jpeg).
Все что нашел в офицальном руководстве - это как задавать цвет (и то с типами возникли проблемы rgb, cmyk и тд.)
 

AirGraph

Участник
Сообщения
244
Реакции
21
Ответ: Определить цвет

Illustrator JavaScript Ref.pdf стр. 168 свойство fillColor. Цвет пикселя растрового объекта определить в IL не представляется возможным, IMHO.

AirGraph.
 

Tuomas

Участник
Топикстартер
Сообщения
15
Реакции
0
Ответ: Определить цвет

AirGraph сказал(а):
Illustrator JavaScript Ref.pdf стр. 168 свойство fillColor. Цвет пикселя растрового объекта определить в IL не представляется возможным, IMHO.

AirGraph.


Ну тогда еще вопрос, в vb (visual basic) есть такая замечательная команда senkeys, есть ли возможность подключить ее к иллюстратору, например для использования инструментов (рисования). Можно было бы просто использовать пиптку по координатам...
 

Steve

Участник
Сообщения
227
Реакции
0
Ответ: Определить цвет

Tuomas сказал(а):
Можно было бы просто использовать пиптку по координатам...
Не получится.
1) в Илле нет такого объекта как Foreground Color (в отличии от Phs).
2) нормально управлять "вводом", можно только через Win API, либо сторонние программы.
3) как связать координаты экрана (пикс.) и коорд. объектов в Илле?

Если jpg были заплейсены в Илл без масок, "трансформов" и т.д., то можно открыть их в Phs, прочитать значение пикселя и передать обратно в Илл.
 

Tuomas

Участник
Топикстартер
Сообщения
15
Реакции
0
Ответ: Определить цвет

ну так я про "винапи" и имел ввиду, есть каки-нибудь примеры для иллюстратора ?
Связать координат, можно их просто вычислить... это не проблема.

Суть в том что необходимо определить переход цвета из одного в другой (цвет однотипный, коды цвета есть, координаты объектов тоже) на картинке в иллюстраторе (если для этого потребуется, возможно привлечь сторонние средства, photoshop, visual basic и тд.)
 

Steve

Участник
Сообщения
227
Реакции
0
Ответ: Определить цвет

Tuomas сказал(а):
есть каки-нибудь примеры для иллюстратора ?
Связать координат, можно их просто вычислить... это не проблема.
не обязательно Илл.. надо просто найти примеры по работе с окнами (FindWindow) и т.д.

Хмм.. и как же связать пиксель в изображении и пиксель на экране? Пусть сделали масштаб такой, что 1:1 показывается, но как узнать что pix(1,1) в jpg это pix(115,99) на экране?


Может какой тестовый файлик покажите?
 

Tuomas

Участник
Топикстартер
Сообщения
15
Реакции
0
Ответ: Определить цвет

Steve сказал(а):
не обязательно Илл.. надо просто найти примеры по работе с окнами (FindWindow) и т.д.

Хмм.. и как же связать пиксель в изображении и пиксель на экране? Пусть сделали масштаб такой, что 1:1 показывается, но как узнать что pix(1,1) в jpg это pix(115,99) на экране?


Может какой тестовый файлик покажите?

что-что типа этого:


Public Sub PushTheButton()

Dim hWnd As Long
Dim lngRet As Long
Dim xcoord As Long, ycoord As Long
Dim retval As Long

hWnd = FindWindow(vbNullString, "Adobe Illustrator")
'PostMessage hwnd, WM_SETFOCUS, 0, 0
lngRet = SetForegroundWindow(hWnd)
'lngRet = BringWindowToTop(hwnd)
'keybd_event VK_I, 0, 0, 0
SendKeys "{i}", True

'Dim hWndActive As Long
' Dim rc As RECT
' Dim oldAccel(0 To 2) As Long
' Dim newAccel(0 To 2) As Long
' Dim oldSpeed As Long
' Dim newSpeed As Long
''
' hWndActive = GetFocus()
' GetWindowRect hWndActive, rc
' newSpeed = 1
' SystemParametersInfo SPI_GETMOUSE, 0, oldAccel(0), 0
' SystemParametersInfo SPI_GETMOUSESPEED, 0, oldSpeed, 0
' SystemParametersInfo SPI_SETMOUSE, 0, newAccel(0), SPIF_SENDCHANGE
' SystemParametersInfo SPI_SETMOUSESPEED, 0, newSpeed, SPIF_SENDCHANGE
' mouse_event MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_MOVE, 10, 10, 0, 0
' mouse_event MOUSEEVENTF_MOVE, 150, 110, 0, 0
' SystemParametersInfo SPI_SETMOUSE, 0, oldAccel(0), SPIF_SENDCHANGE
' SystemParametersInfo SPI_SETMOUSESPEED, 0, oldSpeed, SPIF_SENDCHANGE

SetCursorPos 600, 610

mouse_event WM_LBUTTONDBLCLK Or MK_LBUTTON, 0&, 0&, 1, 0

End Sub


Теперь следующий вопрос, как считать текущий цвет из палитры инструментов ?
 

Tuomas

Участник
Топикстартер
Сообщения
15
Реакции
0
Ответ: Определить цвет

И еще вопрос, как задать объект на vb textframe без использования цикла ?

Пример:

Private Sub Illustrator3()

Dim appRef, docRef, textArtRange, textword, textArt, numberOfWords, pp, pathart

Set appRef = CreateObject("Illustrator.Application.3")
Set docRef = appRef.ActiveDocument

For Each textArt In docRef.TextFrames
Debug.Print textArt.Contents & ": " & textArt.top
Next

End sub

Если без цикла как 'текстфрэйм задать':

Set textArt = appRef.ActiveDocument.TextFrames

так не работает.
 

Steve

Участник
Сообщения
227
Реакции
0
Ответ: Определить цвет

Tuomas сказал(а):
Если без цикла как 'текстфрэйм задать':

Set textArt = appRef.ActiveDocument.TextFrames

так не работает.
в примерах есть
Set textArt = docRef.TextFrames.Add
textArt.Position = Array(200, 450)
textArt.Contents = "Scripting"

если же нужен реф. к определ. фрейму, то в Илле сложнее (хуже) чем в ИД.
Например, разносить по слоям, чтобы в слое был 1 TF, давать уникальное имя и прочие похожие штуки.
 

Tuomas

Участник
Топикстартер
Сообщения
15
Реакции
0
Ответ: Определить цвет

попдробней можно, как это записать, имена объектов имеются (слой один)

пример приведенный вами, добавляет новый объект, а мне нужно считать существующий.
 

Tuomas

Участник
Топикстартер
Сообщения
15
Реакции
0
Ответ: Определить цвет

AirGraph сказал(а):
Illustrator JavaScript Ref.pdf стр. 168 свойство fillColor. Цвет пикселя растрового объекта определить в IL не представляется возможным, IMHO.

AirGraph.


Будьте добры так, привидите пример как вывести код цвета (rgb, cmyk и тд.), у меня с этими командами получается только заливать объекты.
 

Steve

Участник
Сообщения
227
Реакции
0
Ответ: Определить цвет

Tuomas сказал(а):
пример приведенный вами, добавляет новый объект, а мне нужно считать существующий.
Я и сказал, что в Илле плохо с рефами к существующим объектам.
Например, можно поменять имя (Name) у объекта (только надо быть уверенным, что юзер не модифицирует). А потом всё равно придется просматривать имена у всех TF, пока не найдется нужный. Если же документ, не будет модифицироваться, т.е. не будут прибавляться/удаляться TF, то можно использовать index:
Set textArt = appRef.ActiveDocument.TextFrames(index)
например:
Set textArt = appRef.ActiveDocument.TextFrames(1)
 

Tuomas

Участник
Топикстартер
Сообщения
15
Реакции
0
Ответ: Определить цвет

Steve сказал(а):
Я и сказал, что в Илле плохо с рефами к существующим объектам.
Например, можно поменять имя (Name) у объекта (только надо быть уверенным, что юзер не модифицирует). А потом всё равно придется просматривать имена у всех TF, пока не найдется нужный. Если же документ, не будет модифицироваться, т.е. не будут прибавляться/удаляться TF, то можно использовать index:
Set textArt = appRef.ActiveDocument.TextFrames(index)
например:
Set textArt = appRef.ActiveDocument.TextFrames(1)

все это сам сделал, только что, поторопился с постом,

а как цвет вытащить ? Пишет свойство fill доступно только для записи (write)
 

Steve

Участник
Сообщения
227
Реакции
0
Ответ: Определить цвет

Tuomas сказал(а):
а как цвет вытащить ? Пишет свойство fill доступно только для записи (write)
fillColor
может быть разных типов (cmykcolor, rgbcolor и т.д.)
если cmykcolor:
...fillColor.cyan - вернет/назначит значение C-составляющей
 

Tuomas

Участник
Топикстартер
Сообщения
15
Реакции
0
Ответ: Определить цвет

еще вопросик, а как узнать координаты объекта (textframe, textpath) по x, y в документации есть свойство top (пример textArt.top) но он выводит только одну координату... (и не самого объекта а его бонда) ?
 

Steve

Участник
Сообщения
227
Реакции
0
Ответ: Определить цвет

top, left, есть еще Position и всякие bounds: GeometricBounds и т.д.
 

Tuomas

Участник
Топикстартер
Сообщения
15
Реакции
0
Ответ: Определить цвет

Steve сказал(а):
top, left, есть еще Position и всякие bounds: GeometricBounds и т.д.


как использовать position, непойму чего-то, двигать - двигает, а вот с выводом через debug.print проблема... там у нас массив вроде передается, есть примерчик ?
 

Steve

Участник
Сообщения
227
Реакции
0
Ответ: Определить цвет

как мне помниться, top+left это и будет position :)
Просто top/left по одной координате можно менять, а position массив.

в VB samples ("Scripting\Sample Scripts\Visual Basic") есть много различных примеров и про цвет и про Array().

чтобы посмотреть элемент массива... My(i)
хмм. не помню, кажется были какие-то странности с Иллом, position(0)(0) и position(0)(1) что возвращает?
 
Статус
Закрыто для дальнейших ответов.