Просмотр полной версии : как смешать цвета двух клипов
Мне надо сделать так чтобы при соприкосновении два клипа слились в один, и например если у одного клипа был красный цвет, а у другого желтый, то у третьего клипа должен быть оранжевый цвет, или из черного и белого получился бы серый...
http://dev.etcs.ru/blog/as2/ru/etcs/draw/simplegradient/
Судя по вопросу, тебе надо пользовать середину градиента.
а как разбить цвет, полученный getRGB на составляющие? то есть переменной r1 присвоить красную составляющую первого клипа, r2 - второго и.т.д.
А потом можно будет взять среднее арифметическое...
я попробовал взять среднее арифметическое от всего цвета:
c1 = new Color(mc1);
c2 = new Color(mc2);
c3 = new Color(mc3);
c1.setRGB(0xFFFFFF);
c2.setRGB(0x000000);
col1 = c1.getRGB();
col2 = c2.getRGB();
col = (col1+col2)/2;
c3.setRGB("0x"+col.toString(16));
только у меня ерунда получается белый клип возвращает значение 16777215, черный 0, и получается голубой... а мне серый надо...
Хотя бы так:
function splitRGB( rgb ){
var rgb_str = rgb.toString(16);
var R = Number( "0x" + rgb_str.slice( 0,2) );
var G = Number( "0x" + rgb_str.slice( 2,4) );
var B = Number( "0x" + rgb_str.slice( 4,6) );
return {R:R, G:G, B:B};
}
собрать обратно:
function joinRGB(R, G, B){
return ( R << 16 | G << 8 | B );
}
Kikasso, splitRGB в некоторых случаях работать не будет.
function numberToRGB(color:Number):Object {
color = isNaN(color) ? 0 : color;
var r:Number = (color >> 16);
var g:Number = (color >> 8) & 0xFF;
var b:Number = color & 0xFF;
var outObj:Object = {r:r,g:g,b:b};
return outObj;
}
Выдрал из класса.
Большое спасибо... все получилось... только обьясните пожалуйста поподробнее как работают эти строки
var r:Number = (color >> 16);
var g:Number = (color >> 8) & 0xFF;
var b:Number = color & 0xFF;
>> Оператор (побитовый), конвертирует expression1 и expression2 в 32-битное целое число и смещает все биты в expression1 вправо на число разрядов, указанное целым числом, результирующим от преобразования expression2. Биты, смещённые вправо, игнорируются. Чтобы сохранить знак изначального выражения expression, биты слева заполняются нулями, если наиболее значимый бит (самый левый) выражения expression1 будет 0, или заполняются единицами, если наиболее значимый бит будет 1. Смещение значения вправо на одну позицию эквивалентно делению на 2, пренебрегая остатком.
& (bitwise AND)
Оператор (побитовый), конвертирует expression1 и expression2 в 32-битные целые числа, и выполняет операцию "булевого И" над каждым битом аргумента целого числа.. Числа с плавающей запятой преобразуются в целое число, путём отбрасывания десятичной части. В результате мы имеем новое беззнаковое целое число.
Скачай переведенный хелп, тема прилеплена.
__etc, спасибо за поправку, я тоже выдирал, но не из класса и не из той версии, как показало расследование.. на самом деле было так:
function splitRGB(rgb){
var rgb_str = rgb.toString(16);
var R = Number( "0x" + rgb_str.slice( 0,2) ) || 0;
var G = Number( "0x" + rgb_str.slice( 2,4) ) || 0;
var B = Number( "0x" + rgb_str.slice( 4,6) ) || 0;
return { rb:R, gb:G, bb:B, aa:100, ab:0 };
//возвращает объект для setTransform()
}
Ваш способ лучше, признаю.
Кикассо, пожалуйста объясни видать особо одаренному, что произойдет на конкретных примерах:
AA0000(красный)
101010100000000000000000
0000AA(синий)
000000000000000001010101
примеры:
101010100000000000000000 >> 8 = ?
101010100000000000000000 << 4 = ?
000000000000000001010101 | 101010100000000000000000 = ?
000000000000000001010101 & 101010100000000000000000 = ?
чего-то я не догоняю.
кстати не нужен мега-конвертер систем счисления, от двоичной до 36-ричной! (012...xyz) во флеше
домашнее задание:
101010100000000000000000 >> 8 =
1010101000000000
101010100000000000000000 << 4 =
1010101000000000000000000000
000000000000000001010101 |
101010100000000000000000 =
101010100000000001010101
000000000000000001010101 &
101010100000000000000000 =
000000000000000000000000
и еще момент не забудьте, Чтобы сохранить знак изначального выражения expression, биты слева заполняются нулями, если наиболее значимый бит (самый левый) выражения expression1 будет 0, или заполняются единицами, если наиболее значимый бит будет 1
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.