Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.02.2013, 01:46
Blackvic вне форума Посмотреть профиль Отправить личное сообщение для Blackvic Найти все сообщения от Blackvic
  № 1  
Ответить с цитированием
Blackvic

Регистрация: Feb 2013
Сообщений: 3
Question Как узнать тон (Tint) объекта?

Здравствуйте.

Искал всюду, но так и не нашел корректно ответа на свой вопрос.
Нужно просто узнать каким цветом был подкрашен объект.
colorTransform - дает информацию только о том как была изменена подкраска, но через нее узнать оригинальный tintColor нельзя.
Какой-то сомнительный ответ был дан в топике http://www.flasher.ru/forum/showthread.php?t=132880 но это не подходит, так как я получу уже окрашенный объект, опять не зная, каким же цветом?

Вроде тривиальная задача, но или не туда рою, либо что то не понимаю.

Если плохо сформулировал, на всякий случай еще пару строк кода
Код AS3:
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);
}

Старый 15.02.2013, 12:37
nuToH вне форума Посмотреть профиль Отправить личное сообщение для nuToH Найти все сообщения от nuToH
  № 2  
Ответить с цитированием
nuToH
 
Аватар для nuToH

Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
Приведенный вами код работает и копирует все преобразования цвета для обьекта obj и задаёт их для обьекта bmp. для копирования комбинированных преобразований цвета с учетом вышестоящих обьектов можно сделать вот так:
Код AS3:
bmp.transform.colorTransform = obj.transform.concatenatedColorTransform;

Старый 15.02.2013, 12:55
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 3  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Ничего так себе задачку подкинули.

Нашел тут на адобовском форуме вопрос похожий, там чувак делал колор-пикер.
Рабочий код функции выглядит так:
Код AS3:
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);
     }
Закоменчен начальный код задавшего вопрос, последняя строчка - решение проблемы

Старый 15.02.2013, 15:08
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 4  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
http://help.adobe.com/en_US/FlashPla...html#getPixel()
Код AS3:
import flash.display.BitmapData;
 
var bmd:BitmapData = new BitmapData(80, 40, false, 0xFF0000);
 
var pixelValue:uint = bmd.getPixel(0, 0);
trace(pixelValue.toString(16)); // ff0000;
ps и узнать тон и цвет это разные задачи.

Старый 15.02.2013, 15:56
Blackvic вне форума Посмотреть профиль Отправить личное сообщение для Blackvic Найти все сообщения от Blackvic
  № 5  
Ответить с цитированием
Blackvic

Регистрация: 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>

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

Старый 15.02.2013, 16:35
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 6  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
Вообще непонятно, что вы хотите сделать. Когда программа скомпилированна, никакого tint уже нет. Все, он преобразован в матрицу colorTransform. Чтобы наложить на другой объект совершено такой же тинт, надо просто
Код AS3:
var t:ColorTransform = oldMC.transform.colorTransform;
newMC.transform.colorTransform = new ColorTransform(t.redMultiplier,t.greenMultiplier,t.blueMultiplier,t.alphaMultiplier,t.redOffset,t.greenOffset,t.blueOffset,t.alphaOffset);
Или тебе значения tintMultiplyer и tintColor хочется из colorTransform матрицы получить?
__________________
мой пустой блог

Старый 15.02.2013, 16:43
nuToH вне форума Посмотреть профиль Отправить личное сообщение для nuToH Найти все сообщения от nuToH
  № 7  
Ответить с цитированием
nuToH
 
Аватар для nuToH

Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
из матрицы можно легко получить tintMultiplyer и tintColor если только небыло других преобразований над ней.

tintMultiplyer = 1.0 - colorTransform.redMultiplier;
red = colorTransform.redOffset / tintMultiplyer;
green = colorTransform.greenOffset / tintMultiplyer;
blue = colorTransform.blueOffset / tintMultiplyer;

Старый 15.02.2013, 18:16
Blackvic вне форума Посмотреть профиль Отправить личное сообщение для Blackvic Найти все сообщения от Blackvic
  № 8  
Ответить с цитированием
Blackvic

Регистрация: Feb 2013
Сообщений: 3
nuToH, благодарю, такой вариант вычислений на данный момент дал положительный результат. Сам к этому решению не смог придти. Крутил по разному, но вот
tintMultiplyer = 1.0 - colorTransform.redMultiplier;
для меня не очевидное выражение.

Создать новую тему Ответ Часовой пояс GMT +4, время: 21:48.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 21:48.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.