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

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > ActionScript

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 05.02.2004, 02:33
opex вне форума Посмотреть профиль Отправить личное сообщение для opex Найти все сообщения от opex
  № 1  
opex
[+1.3 05.04.09]
 
Аватар для opex

Регистрация: Sep 2003
Адрес: Где-то рядом.
Сообщений: 686
Отправить сообщение для opex с помощью ICQ Отправить сообщение для opex с помощью Skype™
По умолчанию Rgb послогам

проблема заключается в том что не получается разделить 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))
2 вообще не работает хотя должно
Код:
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));
все череп уже трешит
__________________
Бойтесь китайцев, компы приносящих!

Старый 05.02.2004, 03:50
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 2  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
вторая функция не работает из-за того что тип данных у нас НЕ трехбайтовый - а значит смещение влево не удалит самые большие разряды числа, которые по задумке должны были бы стереться при выходе за рамки размеров типа...
(color << 8) >> 16; // это фигня

хотя мысль была верная :)

Код:
function decolorRGB(color) {
	var colorArray = new Array();
	var rem = color;
	colorArray[0] = rem >> 16;
	rem -= colorArray[0] << 16;
	colorArray[1] = rem >> 8;
	rem -= colorArray[1] << 8;
	colorArray[2] = rem;
	return colorArray;
}
trace(decolorRGB(0xFFFFFF));
если надо в хексовом виде вывести обязательно - пиши функцию перевода из десятичной системы в хексы :) флэш все числа выдает только в десятичной, к сожалению..


Последний раз редактировалось Nox Noctis; 05.02.2004 в 04:03.
Старый 05.02.2004, 05:08
sergwizard вне форума Посмотреть профиль Отправить личное сообщение для sergwizard Посетить домашнюю страницу sergwizard Найти все сообщения от sergwizard
  № 3  
sergwizard
 
Аватар для sergwizard

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

Старый 05.02.2004, 05:18
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 4  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
ай шайтан :)

и правда все еще проще... акелла промахнулся :)

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

Старый 05.02.2004, 11:51
sergwizard вне форума Посмотреть профиль Отправить личное сообщение для sergwizard Посетить домашнюю страницу sergwizard Найти все сообщения от sergwizard
  № 5  
sergwizard
 
Аватар для sergwizard

Регистрация: Jan 2002
Адрес: СПб-Denver-Лермонтов
Сообщений: 1,525
Цитата:
а нужно может быть такое преобразование, например, если надо сделать установки цвета объекта в виде выбора RGB в трех текстовых окошках в шестнадцатиричной форме.. других вариантов использования что-то не вижу..
А я и здесь не вижу смысла в таком преобразовании, так как в этом случае нам нужен обратный процесс: color = 0x +R+G+B. Именно сложение значений текстовых полей, но не разбиение цвета.
__________________
Для того чтобы узнавать, есть два способа: - задавать вопросы и пытаться самому на них ответить. Второй способ более продуктивный.
(S.Wizard)

Старый 05.02.2004, 12:08
opex вне форума Посмотреть профиль Отправить личное сообщение для opex Найти все сообщения от opex
  № 6  
opex
[+1.3 05.04.09]
 
Аватар для opex

Регистрация: Sep 2003
Адрес: Где-то рядом.
Сообщений: 686
Отправить сообщение для opex с помощью ICQ Отправить сообщение для opex с помощью Skype™
всем спосибо

Цитата:
sergwizard
А я и здесь не вижу смысла в таком преобразовании, так как в этом случае нам нужен обратный процесс: color = 0x +R+G+B. Именно сложение значений текстовых полей, но не разбиение цвета.
проблема то в том что сложив 1 2 3 ты получиш не 123 а 6 но эту проблему тоже можно решить
Код:
color = (r<<16 | g<<8 | b<<0)
а мне это вся хренотень нужна для создания скрипта затемнения цвета тут какойто чел поднял вопрос я заинтересовался зделал но там все работало хреново и ришил доделать а там то мне нужен ргб раскинутый на три переменные вот и все
__________________
Бойтесь китайцев, компы приносящих!

Старый 05.02.2004, 12:16
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 7  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
Цитата:
Оригинал написал(а) sergwizard
нам нужен обратный процесс
но пипетку (eyedropper tool) без преобразования из числа в три зекса сделать не получится. если хочешь видеть в окошках именно хексы... хотя заморочка получается излишняя, это да :)

Старый 06.02.2004, 00:21
sergwizard вне форума Посмотреть профиль Отправить личное сообщение для sergwizard Посетить домашнюю страницу sergwizard Найти все сообщения от sergwizard
  № 8  
sergwizard
 
Аватар для sergwizard

Регистрация: Jan 2002
Адрес: СПб-Denver-Лермонтов
Сообщений: 1,525
Цитата:
проблема то в том что сложив 1 2 3 ты получиш не 123 а 6 но эту проблему тоже можно решить color = (r<<16 | g<<8 | b<<0)
А я и не собирался, и тебе не советовал складывать 1 2 3. Я предлагал R+G+B. Смотри пример, - все тип-топ. Да, еще: b<<0 – это лишнее. Достаточно просто b.
Цитата:
мне это вся хренотень нужна для создания скрипта затемнения цвета
Тогда, мне кажется, ты не там ищешь решение этой задачи. Я бы рыскал в таком направлении: поверх цветной плоскости, накладывал бы черную такую же плоскость, и затем, в зависимости от угла поворота, менял ее альфу. Альфу легче рассчитать, чем цвет.
2Nox
Цитата:
но пипетку (eyedropper tool) без преобразования из числа в три зекса сделать не получится. если хочешь видеть в окошках именно хексы...
Вот здесь я не очень понимаю. Если пипетка, - то зачем нужны окошки? И наоборот… Пипетку, мне так кажется, удобнее делать не через хексы, а через Hue. Все-таки циферки – они и в Африке…. С ними легче творить вычисления.
В этом же аттачменте – есть и простенький пример пипетки.
Вложения
Тип файла: zip 4opex.zip (12.4 Кб, 333 просмотров)
__________________
Для того чтобы узнавать, есть два способа: - задавать вопросы и пытаться самому на них ответить. Второй способ более продуктивный.
(S.Wizard)

Старый 06.02.2004, 00:48
sergwizard вне форума Посмотреть профиль Отправить личное сообщение для sergwizard Посетить домашнюю страницу sergwizard Найти все сообщения от sergwizard
  № 9  
sergwizard
 
Аватар для sergwizard

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

Старый 06.02.2004, 03:13
opex вне форума Посмотреть профиль Отправить личное сообщение для opex Найти все сообщения от opex
  № 10  
opex
[+1.3 05.04.09]
 
Аватар для opex

Регистрация: Sep 2003
Адрес: Где-то рядом.
Сообщений: 686
Отправить сообщение для opex с помощью ICQ Отправить сообщение для opex с помощью Skype™
мне ненужен быстрый результат мне кокраз и хочется разобратся как происходит вычисление ргб на затемнение вот в чем фишка такой способ как ты предложил мне в голову прешол первым но серовно спосибо лудьше бы помог не как не могу врубится в эти вычисления допустим если цвет 0x343434 то для затемнения можно просто уменьшать значение R G и B на одну велечину а вот как работать на пример с этим 0x234412 тут как то по процентно надо расчитывать но не как не врублюсь как
__________________
Бойтесь китайцев, компы приносящих!

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

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

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


 


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


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