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

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

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

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
По умолчанию Алгоритм пипетки

Есть кнопка, при клике по которой мы получаем некое значение цвета. Задача состоит в том, чтоб воспроизвести это значение на самодельной палитре. Палитра из себя представляет круг с градиентной заливкой от центра. Также есть отдельный ползунок, регулирующий яркость.
Как подобрать необходимый цвет и уровень яркости (от -255 до 255 или от -1 до 1)? Заранее спасибо за советы.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 18.09.2011, 14:08
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 2  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
BitmapData#draw, getPixel - не подходит?

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

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Psycho Tiger, проблема не получить цвет пикселя, а отобразить его "координаты" на специальной панельке. Т.е. зная значение цвета нужно найти подходящий пиксель на специальном изображении (градиент) и подобрать значение яркости.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

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

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Хм.
А как рисуется этот круг заливки?

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

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Вот так. Т.е. тупо картинкой.
Изображения
 
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!


Последний раз редактировалось TanaTiX; 18.09.2011 в 16:33.
Старый 18.09.2011, 16:52
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
"Яркость" это понятие пространства HSB, а не RGB. BitmapData работает с RGB, найти пиксель на картинке не получится, нельзя разделить цвет на "Brightness" и "RGB", a RGB на палитре представлен только на десятую часть отсилы.
Допустим такой алгоритм - получив цвет пипетки, Вы преобразуете его в HSB. Затем подставляете то значение яркости, которое на палитре (для этого на палитре ВСЕ пиксели должны иметь строго одинаковую яркость!), преобразуете обратно в RGB и ищете на картинке палитры с помощью getPixel или getColorBoundsRect. У меня есть большие сомнения, что цвет ВСЕГДА будет найден (сомневаюсь что на картинке представлено все пространство HSB для одного значения В), но другого способа я не вижу.
__________________
Reality.getBounds(this);

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

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Преобразование цвета осуществляется с помощью статического метода mx.utils.ColorUtil.adjustBrightness. На данный момент непосредственно в коде проекта используется только RGB (что в adjustBrightness не знаю, очень может быть, что там осуществляется преобразование). В любом случае спасибо за вариант. Тема еще актуальна.
В отношении полноценности палитры думаю можно искать максимально приближенное значение. Сейчас сам себе представляю что-то из области волнового алгоритма: отправная точка - центр круга. Попиксельно радиально проверяем разницу между текущим и проверяемым цветом, остановившись только в случае, когда разница или не изменяется или увеличивается. А дальше уже подбираем яркость.
Хотя этот вариант мне представляется более затратным и кривым.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 18.09.2011, 17:52
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 8  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
(что в adjustBrightness не знаю, очень может быть, что там осуществляется преобразование
Достаточно открыть исходник и посмотреть.
Код AS3:
public static function adjustBrightness(rgb:uint, brite:Number):uint
{
	var r:Number = Math.max(Math.min(((rgb >> 16) & 0xFF) + brite, 255), 0);
	var g:Number = Math.max(Math.min(((rgb >> 8) & 0xFF) + brite, 255), 0);
	var b:Number = Math.max(Math.min((rgb & 0xFF) + brite, 255), 0);
 
	return (r << 16) | (g << 8) | b;
}
Используйте вариант предложенный Wolsh, в пакете mx.utils для этого есть класс HSBColor. Найти минимальную разницу в векторе пикселей палитры будет менее затратно, чем радиально перебирать пиксели.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 18.09.2011, 18:27
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 9  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
alatar, спасибо. Кстати этот класс у меня вшит в swc, так что содержимое посмотреть не могу.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 18.09.2011, 18:34
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 10  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Все исходники лежат в SDK (%путь_до_сдк%/frameworks/projects), если вы их не удаляли.
__________________
משיח לא בא
משיח גם לא מטלפן

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

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

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


 


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


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