![]() |
|
|
![]()
|
|
| мухр |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 11.8.2005 Репутация: нет Всего: нет |
http://forum.woweb.ru/topic15973s0.html
Дублирую тему с вовеба. Цвет задаётся #RRGGBB. Каким алгоритмом можно реализовать, чтобы текущий цвет сделать чуток светлее или темнее: то-есть приблизить немножко к белому (#FFFFFF) или чёрному (#000000), но чтобы ясно было видно, что сам цвет (текущее равновесие каналов) не изменился? Подозреваю, что здесь математическая функция, связанная с экспонентой. Если понимать под цветом свечение с преобладанием каких-то определённых длин волн, то под светлым/тёмным следует понимать физическую величину, характеризующую интенсивность свечения, которая может принимать значения в интервале от нуля до бесконечности. При текущем задании интенсивности свечения каждого канала (00-FF или 0-255) верхний порог имеет границу, следовательно, не годится вариант изменения общей яркости путём домножения значения каждого цветового канала на произвольный коеффициент. Какая здесь может быть функция? Это сообщение отредактировал(а) мухр - 11.8.2005, 09:41 |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
и тем не менее, нужно именно домножать а то, что что-то будет вылазить за FF - ограничения RGB, и с этим ничего не поделаешь разве что, все, что вылазит, обрезать, но это уже - изменение цвета... -------------------- qqq |
|||
|
||||
| мухр |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 11.8.2005 Репутация: нет Всего: нет |
maxim1000, отчасти согласен: домножать, НО НЕ В ЧИСТОМ ВИДЕ. Нужно построить функцию таким образом, чтобы коеффициент домножения стремился к единице при приближении к верхнему порогу.
Тут не всё так просто. Добавлено @ 10:01 Кстати, домножать в данном случае на коееффициент - неверное решение. Как интересно следующий цвет будет работать: #990000 ??? Тут домножением не отделаешься. |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
насколько я понял задача:
увеличить интенсивность в k раз (k чуть-чуть больше 1) при этом минимизировать изменение цвета правильно? если да, то: 1. находим обычное решение задачи - домножением на k 2. проверяем, удовлетворяет ли решение ограничениям (FF) 3. если да, то задача решена - цвет вообще не измпенился 4. если нет, считаем, что те компоненты, которые вышли за пределы, должны быть FF, т.к. это - самое близкое допустимое значение к реальному если вместо того, чтобы обрезать FF, делать что-то более плавное - цвет будет меняться больше... -------------------- qqq |
|||
|
||||
| мухр |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 11.8.2005 Репутация: нет Всего: нет |
||||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
но это - неправильно...
если у нас будет цвет, например 2 зеленых, 1 красный (если я не ошибаюсь, желтый) при чем значения их будут небольшими тогда при увеличении интенсивности зеленый увеличится сильнее (т.к. он ближе к быстрорастущему участку кривой), и общий цыет станет зеленоватым... -------------------- qqq |
|||
|
||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: нет Всего: 55 |
Уже давно для этих целей использую свою функцию:
Меня вроде устраивает -------------------- Все знать невозможно, но хочется |
|||
|
||||
| мухр |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 11.8.2005 Репутация: нет Всего: нет |
maxim1000, вышеуказанная кривая достаточно широкораспространена. Не помню, как она записывается аналитически. В зависимости от параметров она может вести себя различно: можно установить ей верхний порог и крутизну. Скорее всего, крутизна будет несколько различна для каждого из каналов, если цвет отличается от серого.
|
|||
|
||||
| мухр |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 11.8.2005 Репутация: нет Всего: нет |
maxim1000, хотя даже и не крутизна здесь роль играет, а растянутость по горизонтали - скорее всего.
|
|||
|
||||
| мухр |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 11.8.2005 Репутация: нет Всего: нет |
Петрович, пытаюсь разобраться с твоей функцией.
MulDiv() - это что такое? |
|||
|
||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: нет Всего: 55 |
Это целочисленное умножение и деление:
Вот из MSDN:
-------------------- Все знать невозможно, но хочется |
|||
|
||||
| Psychosis |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 12.8.2005 Репутация: нет Всего: нет |
Я так думаю, что MulDiv(a, b, c) = Round(a*(b/c))
|
|||
|
||||
| мухр |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 11.8.2005 Репутация: нет Всего: нет |
Что ж, надо попробовать будет.
Благодарю. |
|||
|
||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: нет Всего: 55 |
Не совсем. Если быть более точным то это , MulDiv(a, b, c) = a * b div c . Так будет быстрее, и с минимальными потерями точности. А чем MulDiv - то не нравится? -------------------- Все знать невозможно, но хочется |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |