![]() |
|
||||||||||
|
|||||
|
Здравствуйте, есть какой-либо цвет, например, 0x2C9100.
Нужно сделать его темнее на какое-то заданное значение (в процентах приблизить к 0x000000). Как это делается в теории я понимаю, нужно по каждой компоненте отнять процент, и все! Как поступить тут? Может это может класс ColorTransform (flash.geom.ColorTransform)? Но я чего-то там не разобрался. Спасибо. ![]() Последний раз редактировалось enepx; 10.03.2007 в 16:15. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Перевести его в HSB, потом менять B.
http://dev.etcs.ru/blog/as2/ru/etcs/draw/colorobject/ в помощь. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Пример использования:
import ru.etcs.draw.ColorObject;
drawRect = function (color, y) {
this.beginFill(color, 100);
this.moveTo(0, y);
this.lineTo(100, y);
this.lineTo(100, y+2);
this.lineTo(0, y+2);
this.endFill();
};
var color = new ColorObject();
color.rgb = 0x2C9100;
var y = 0;
trace(color);
while (color.B>0) {
trace('Brightness: '+color.B+', color: '+color.hex);
drawRect(color.rgb, y += 2);
color.B--;
}
while (color.B<100) {
trace('Brightness: '+color.B+', color: '+color.hex);
drawRect(color.rgb, y += 2);
color.B++;
}
Пример: import ru.etcs.draw.SimpleGradient;
drawRect = function (color, y) {
this.beginFill(color, 100);
this.moveTo(0, y);
this.lineTo(100, y);
this.lineTo(100, y+2);
this.lineTo(0, y+2);
this.endFill();
};
var gradient = new SimpleGradient(0x2C9100,0x000000,100);
for (var i = 0;i<200;i+=2) {
color = gradient.getColor(i/2);
drawRect(color,i);
}
Последний раз редактировалось etc; 10.03.2007 в 16:30. |
|
|||||
|
Цитата:
The class or interface 'ru.etcs.draw.ColorObject' could not be loaded. var color = new ColorObject(); Последний раз редактировалось etc; 10.03.2007 в 17:46. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Класс можно взять тут: http://dev.etcs.ru/framework.zip и распаковать архив как есть рядом с исходником (должны появится две папки ru и com), затем запустить.
|
|
|||||
|
да я давно скачал положил его к общим Флешовым классам, думал должно прокатить, на import же он не ругался )
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Распакуй архив в c:\Documents and Settings\USER\Local Settings\Application Data\Macromedia\Flash 8\en\Configuration\Classes\
|
|
|||||
|
А я в Program Files в флешовую распаковывал!
Кстати, все заработало! Спасибо. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Изучи справку по этим классам, особенно по ColorObject.
Возможно, сегодня обновлю все классы, допишу JavaDoc и оформлю, как полагается. Т.е. архив можно будет перезакачать. |
|
|||||
|
Регистрация: Oct 2004
Сообщений: 149
|
Всячески пытаются свои классы дать человеку в руки...
Вот, самый простой код, взятый с учебника: function RGBtoHSB (rgb:Number)
{
var R = (rgb&0xff0000)>>16;
var G = (rgb&0xff00)>>8;
var B = (rgb&0xff);
var Br = Math.max(Math.max(R,G),B);
var minVal = Math.min(Math.min(R,G),B);
var delta = Br - minVal;
if ( Br == 0 ) { S = 0 } else { S = delta/Br*100; }
if ( S == 0) { H = 0 } else if (R == Br) { H = 60*(G-B)/delta } else if ( G == Br ) { H = 120+60*(B-R)/delta } else {
H = 240+60*(R-G)/delta;}
if ( H < 0) { H +=360 };
return ([Math.round(H), Math.round(S), Math.round(Br/255*100)])
}
function HSBtoRGB(H, S, Br)
{
Br = Br/100*255;
if ( S == 0) {
R = G = B = Br
} else {
var resH = H/60-Math.floor(H/60);
var bot = (Br*(1-S/100));
var dec = (Br*(1-(S*resH)/100));
var inc = (Br*(1-(S*(1-resH)/100)));
switch (Math.floor(H/60)){
case 0: R = Br; G = inc; B = bot; break;
case 1: R = dec; G = Br; B = bot; break;
case 2: R = bot; G = Br; B = inc; break;
case 3: R = bot; G = dec; B = Br; break;
case 4: R = inc; G = bot; B = Br; break;
case 5: R = Br; G = bot; B = dec; break;
}
}
return Math.round(R)<<16|Math.round(G)<<8|Math.round(B);
}
HSBColor = RGBtoHSB(0х2C9100) // HSBColor становится масивом
// HSBColor[0] - Hue - тон ( тон цвета)
// HSBColor[1] - Saturation - насыщенность (%)
// HSBColor[2] - Brightnes, а вот это нам интересно, увеличивая или уменьшая этот параметр, мы увеличиваем или уменьшаем яркость цвета (%)
changeBrightnessOn = -10 // уменьшим яркость на 10%
myMcColor = new Cоlor (my_mc)
myMcColor.setRGB(HSBtoRGB(HSBColor[0], HSBColor[1], HSBColor[2]+changeBrightnessOn))
Эта схема перевода стандартная наработка, если хочешь, напиши себе универсальный клас и используй его на здоровье ![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:09. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|