|
|
|||||
Регистрация: Feb 2013
Сообщений: 3
|
Как узнать тон (Tint) объекта?
Здравствуйте.
Искал всюду, но так и не нашел корректно ответа на свой вопрос. Нужно просто узнать каким цветом был подкрашен объект. colorTransform - дает информацию только о том как была изменена подкраска, но через нее узнать оригинальный tintColor нельзя. Какой-то сомнительный ответ был дан в топике http://www.flasher.ru/forum/showthread.php?t=132880 но это не подходит, так как я получу уже окрашенный объект, опять не зная, каким же цветом? Вроде тривиальная задача, но или не туда рою, либо что то не понимаю. Если плохо сформулировал, на всякий случай еще пару строк кода function copyTint (obj : DisplayObject):void { var bmpData : BitmapData = new BitmapData(100, 100, false, 0xFFFFFFFF); var bmp:Bitmap = new Bitmap(bmpData); // это не работает, белый квадрат не окрашивается нужным цветом // bmp.transform.colorTransform = obj.transform.colorTransform; addChild(bmp); } |
|
|||||
Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
|
Приведенный вами код работает и копирует все преобразования цвета для обьекта obj и задаёт их для обьекта bmp. для копирования комбинированных преобразований цвета с учетом вышестоящих обьектов можно сделать вот так:
|
|
|||||
Ничего так себе задачку подкинули.
Нашел тут на адобовском форуме вопрос похожий, там чувак делал колор-пикер. Рабочий код функции выглядит так: function setColourFor(e:ColorPickerEvent){ var image:InteractivePNG = getChildByName(type) as InteractivePNG; // movieClip var bitmap:Bitmap = image.getChildAt(0) as Bitmap; // loaded PNG var c:ColorTransform = bitmap.transform.colorTransform; bitmap.transform.colorTransform = new ColorTransform(); c.color = e.color; // colorpickerevent // bitmap.transform.colorTransform = c; bitmap.transform.colourTransform(bitmap.bitmapData.rect, c); } |
|
|||||
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
http://help.adobe.com/en_US/FlashPla...html#getPixel()
ps и узнать тон и цвет это разные задачи. |
|
|||||
Регистрация: Feb 2013
Сообщений: 3
|
#2, 4 - ответ совсем в молоко.
#3 - надо поэкспериментировать, может какими нибудь хитростями можно будет получить хоть что-то приближенное. Также решил добавить еще пояснений к своему вопросу, раз добрые люди не проигнорировали топик Единственный очень "вывернутый" способ, который нашел, чтобы узнать, что же было задано в том окошке, это параллельно из кода парсить исходник ролика, сохраненного в *.xfl (DOMDocument.xml) в котором можно найти заветное значение: // ... где то в глубинах структуры ролика нахожу следующую инфу <DOMFrame index="29" duration="499" tweenType="motion" motionTweenSnap="true" keyMode="22017"> <elements> <DOMSymbolInstance libraryItemName="pers_04" selected="true" symbolType="graphic" firstFrame="29" loop="loop"> <matrix> <Matrix tx="2115.5" ty="895"/> </matrix> <transformationPoint> <Point x="41" y="84.5"/> </transformationPoint> <color> <Color tintMultiplier="0.29" tintColor="#2E5BC2"/> </color> </DOMSymbolInstance> </elements> </DOMFrame> // ... |
|
|||||
Регистрация: Jan 2009
Сообщений: 1,651
|
Вообще непонятно, что вы хотите сделать. Когда программа скомпилированна, никакого tint уже нет. Все, он преобразован в матрицу colorTransform. Чтобы наложить на другой объект совершено такой же тинт, надо просто
Или тебе значения tintMultiplyer и tintColor хочется из colorTransform матрицы получить?
__________________
мой пустой блог |
|
|||||
Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
|
из матрицы можно легко получить tintMultiplyer и tintColor если только небыло других преобразований над ней.
tintMultiplyer = 1.0 - colorTransform.redMultiplier; red = colorTransform.redOffset / tintMultiplyer; green = colorTransform.greenOffset / tintMultiplyer; blue = colorTransform.blueOffset / tintMultiplyer; |
|
|||||
Регистрация: Feb 2013
Сообщений: 3
|
nuToH, благодарю, такой вариант вычислений на данный момент дал положительный результат. Сам к этому решению не смог придти. Крутил по разному, но вот
tintMultiplyer = 1.0 - colorTransform.redMultiplier; для меня не очевидное выражение. |
Часовой пояс GMT +4, время: 23:30. |
|
« Предыдущая тема | Следующая тема » |
|
|