![]() |
|
||||||||||
|
|
|
|||||
|
проблема заключается в том что не получается разделить RGB на три шеснацетиричных числа R , G и B тоесть 0x034FC3 представить ка 0x03,0x4f,0xC3 написал две функции
1 все раотает но слишком грамовски и возврошает стринг function decolorRGB(color) {
colorArray = new Array("0x", "0x", "0x");
if (color >> 20 == 0) {
s = "0"+color.toString(16);
} else {
s = color.toString(16);
}
for (i=0; i<7; i++) {
if (i == 0 || i == 1) {
colorArray[0] += s.charAt(i);
} else if (i == 2 || i == 3) {
colorArray[1] += s.charAt(i);
} else if (i == 4 || i == 5) {
colorArray[2] += s.charAt(i);
}
}
return colorArray;
}
trace(decolorRGB(0x02F453))
function decolorRGB(color) {
colorArray = new Array();
colorArray[0] = color >> 16;// смещаем на право на 16 тоесть получаем последние 8 бит информации
colorArray[1] = (color << 8) >> 16;// смешаем влево на восемь избовляемся от последних 8 бит инфы и смешаем на право на 16 получаем оставшиеся 8 бит тость сиредину
colorArray[2] = (color << 16) >> 16;// смешаем в лево на 16 избвляемся от 16 бит и смешаем в право на 16 убирая 16 нулей получаем последние восемь бит
return colorArray;
}
trace(decolorRGB(0xFFFFFF));
__________________
Бойтесь китайцев, компы приносящих! |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
вторая функция не работает из-за того что тип данных у нас НЕ трехбайтовый - а значит смещение влево не удалит самые большие разряды числа, которые по задумке должны были бы стереться при выходе за рамки размеров типа...
(color << 8) >> 16; // это фигня хотя мысль была верная :) если надо в хексовом виде вывести обязательно - пиши функцию перевода из десятичной системы в хексы :) флэш все числа выдает только в десятичной, к сожалению.. Последний раз редактировалось Nox Noctis; 05.02.2004 в 04:03. |
|
|||||
|
Регистрация: Jan 2002
Адрес: СПб-Denver-Лермонтов
Сообщений: 1,525
|
Вот такая же хрень. Только легче.
function decolorRGB(col){
colArr = [];
colString = col.toString(16);
R = "0x"+colString.substr(0,2);
G = "0x"+colString.substr(2,2);
B = "0x"+colString.substr(4,2);
colArr.push(R,G,B)
return colArr;
}
trace(decolorRGB(0xFFC6E0));
Странные вещи ты пытаешься сделать. А зачем? У тебя уже ЕСТЬ эти значения (R,G,B). Я понимаю, если ты хочешь сделать ползунки для изменения (setTransform) цвета объекта. И тогда ты привязывал бы положение ползунка к значениям ra, rb, ga, gb, ba, bb, aa, ab, которые выражены в Number. Вот тогда бы к этим цифрам (Number) можно было бы применить toString(16).
__________________
Для того чтобы узнавать, есть два способа: - задавать вопросы и пытаться самому на них ответить. Второй способ более продуктивный. (S.Wizard) |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
ай шайтан :)
и правда все еще проще... акелла промахнулся :) а нужно может быть такое преобразование, например, если надо сделать установки цвета объекта в виде выбора RGB в трех текстовых окошках в шестнадцатиричной форме.. других вариантов использования что-то не вижу.. |
|
|||||
|
Регистрация: Jan 2002
Адрес: СПб-Denver-Лермонтов
Сообщений: 1,525
|
Цитата:
__________________
Для того чтобы узнавать, есть два способа: - задавать вопросы и пытаться самому на них ответить. Второй способ более продуктивный. (S.Wizard) |
|
|||||
|
всем спосибо
Цитата:
а мне это вся хренотень нужна для создания скрипта затемнения цвета тут какойто чел поднял вопрос я заинтересовался зделал но там все работало хреново и ришил доделать а там то мне нужен ргб раскинутый на три переменные вот и все
__________________
Бойтесь китайцев, компы приносящих! |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
Цитата:
|
|
|||||
|
Регистрация: Jan 2002
Адрес: СПб-Denver-Лермонтов
Сообщений: 1,525
|
Цитата:
Цитата:
2Nox Цитата:
В этом же аттачменте – есть и простенький пример пипетки.
__________________
Для того чтобы узнавать, есть два способа: - задавать вопросы и пытаться самому на них ответить. Второй способ более продуктивный. (S.Wizard) |
|
|||||
|
Регистрация: Jan 2002
Адрес: СПб-Denver-Лермонтов
Сообщений: 1,525
|
Opex, только что прочитал твой ответ menik(у). И твой же код. Такой подход бедноват и ущербен.
А давай попробуем в том направлении, которое я предложил. _root.createEmptyMovieClip("muv1", 1);
with (_root.muv1) {
lineStyle(0, 0x000000, 100);
beginFill(0xFF00FF, 100);
moveTo(0, 0);
lineTo(200, 0);
lineTo(200, 100);
lineTo(0, 100);
lineTo(0, 0);
endFill();
}
// Клажем тень
_root.createEmptyMovieClip("muv2", 3);
with (_root.muv2) {
lineStyle(0, 0x000000, 0);
beginFill(0x000000, 30);
moveTo(100, 0);
lineTo(200, 0);
lineTo(200, 100);
lineTo(100, 100);
lineTo(100, 0);
endFill();
}
__________________
Для того чтобы узнавать, есть два способа: - задавать вопросы и пытаться самому на них ответить. Второй способ более продуктивный. (S.Wizard) |
|
|||||
|
мне ненужен быстрый результат мне кокраз и хочется разобратся как происходит вычисление ргб на затемнение вот в чем фишка такой способ как ты предложил мне в голову прешол первым но серовно спосибо лудьше бы помог не как не могу врубится в эти вычисления допустим если цвет 0x343434 то для затемнения можно просто уменьшать значение R G и B на одну велечину а вот как работать на пример с этим 0x234412 тут как то по процентно надо расчитывать но не как не врублюсь как
__________________
Бойтесь китайцев, компы приносящих! |
![]() |
Часовой пояс GMT +4, время: 17:05. |
|
|
« Предыдущая тема | Следующая тема » |
|
|