Алгоритм пипетки
Есть кнопка, при клике по которой мы получаем некое значение цвета. Задача состоит в том, чтоб воспроизвести это значение на самодельной палитре. Палитра из себя представляет круг с градиентной заливкой от центра. Также есть отдельный ползунок, регулирующий яркость.
Как подобрать необходимый цвет и уровень яркости (от -255 до 255 или от -1 до 1)? Заранее спасибо за советы. |
BitmapData#draw, getPixel - не подходит?
|
Psycho Tiger, проблема не получить цвет пикселя, а отобразить его "координаты" на специальной панельке. Т.е. зная значение цвета нужно найти подходящий пиксель на специальном изображении (градиент) и подобрать значение яркости.
|
Хм.
А как рисуется этот круг заливки? |
Вложений: 1
Вот так. Т.е. тупо картинкой.
|
"Яркость" это понятие пространства HSB, а не RGB. BitmapData работает с RGB, найти пиксель на картинке не получится, нельзя разделить цвет на "Brightness" и "RGB", a RGB на палитре представлен только на десятую часть отсилы.
Допустим такой алгоритм - получив цвет пипетки, Вы преобразуете его в HSB. Затем подставляете то значение яркости, которое на палитре (для этого на палитре ВСЕ пиксели должны иметь строго одинаковую яркость!), преобразуете обратно в RGB и ищете на картинке палитры с помощью getPixel или getColorBoundsRect. У меня есть большие сомнения, что цвет ВСЕГДА будет найден (сомневаюсь что на картинке представлено все пространство HSB для одного значения В), но другого способа я не вижу. |
Преобразование цвета осуществляется с помощью статического метода mx.utils.ColorUtil.adjustBrightness. На данный момент непосредственно в коде проекта используется только RGB (что в adjustBrightness не знаю, очень может быть, что там осуществляется преобразование). В любом случае спасибо за вариант. Тема еще актуальна.
В отношении полноценности палитры думаю можно искать максимально приближенное значение. Сейчас сам себе представляю что-то из области волнового алгоритма: отправная точка - центр круга. Попиксельно радиально проверяем разницу между текущим и проверяемым цветом, остановившись только в случае, когда разница или не изменяется или увеличивается. А дальше уже подбираем яркость. Хотя этот вариант мне представляется более затратным и кривым. |
Цитата:
Код AS3:
|
alatar, спасибо. Кстати этот класс у меня вшит в swc, так что содержимое посмотреть не могу.
|
Все исходники лежат в SDK (%путь_до_сдк%/frameworks/projects), если вы их не удаляли.
|
Часовой пояс GMT +4, время: 15:33. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.