![]() |
|
|
![]()
|
|
| masterik |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 28.8.2006 Где: Остенд, Бельгия Репутация: нет Всего: нет |
Доброго времени суток,
Очень срочно нужен алгоритм изменения яркости цвета в RGB пространстве... или на крайний случай в HSL/HSB пространстве. Например имеется цвет RGB (255, 255, 128) - отсюда мне нужно получить два цвета: немного темнее и светлее имеюшегося... Был бы рад увидеть не только формулу или кусок кода, но и парочку комментариев или ссылочку для прочтения... Заранее очень благодарен за любую помощь |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 7 Всего: 183 |
Тогда тебе нужно не яркость менять, а интенсивность вроде. Пересчитываешь в HSL (или другое пространство, где оттенок в отдельную компоненту выделен), увеличиваешь или уменьшаешь компоненту, отвечающую зи интенсивность (или за светлоту), пересчитываешь обратно. Для "немного светлее\темнее" у меня формул нет, есть именно для яркости\контрастности\интесивности (через YUV). Надо? Вот еще здесь посмотри: http://www.easyrgb.com/math.php -------------------- ... |
|||
|
||||
| _Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Earnest, а мне тоже интересны формулы для яркости\контрастности\интесивности
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
| dereyly |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 217 Регистрация: 16.6.2006 Репутация: 1 Всего: 4 |
можно возвести в степень или умножить =)
вроде степень увеличивает яркость, а умножение осветляет Ну если неравномерная освещенность то нужно гистограмму(ы) анализировать выделять пики и растягивать (как то так) |
|||
|
||||
| masterik |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 28.8.2006 Где: Остенд, Бельгия Репутация: нет Всего: нет |
Было бы интересно! Нашел неплохие примеры конвертации между пространствами: http://www.codeproject.com/KB/recipes/colorspace1.aspx http://www.codeproject.com/KB/miscctrl/colorwheelv1.aspx А нет формулы, чтобы прямо в RGB выполнить эту задачу, чтобы не терять время на переходы между пространствами? |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 1 Всего: 317 |
Если для человеческого глаза, то по идее (r, g, b) +- ([0.30, 0.59, 0.11] * (сколько нужно отнять/добавить)), отнимет именно от якрости, коэффициенты задают чувствительность человеческого глаза к исходной компоненте.
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| TeAnton |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 5.7.2007 Репутация: нет Всего: нет |
Если нужно быстро, и не нужен особо точный результат, можно просто каждый компонент RGB умножить на коэффициент. Коэффициент больше 1 осветляет, коэффициент меньше 1 затемняет. Дешево и сердито. Не забудь потом обработать переполнение через 255.
|
|||
|
||||
| masterik |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 28.8.2006 Где: Остенд, Бельгия Репутация: нет Всего: нет |
Спасибо, вот что у меня вышло:
Правильно ли я понял, то что вы предложили? Я получаю немного странные результаты... в каком диапозоне должен лежать коэффициент? RGB компоненты должны быть в диапозоне [0,1] или [0,255]? |
||||
|
|||||
| Earnest |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 7 Всего: 183 |
Извините, давно не заглядывала. Вот формулы пересчета и коррекции яркости\контраста. Все весьма несложно и работает вполне быстро.
-------------------- ... |
||||
|
|||||
| masterik |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 28.8.2006 Где: Остенд, Бельгия Репутация: нет Всего: нет |
Sardar, Earnest,
Большое вам спасибо за помощь! Объеденив два ваших решения, которые очень схожи, получил нужный мне результат! Так как пишу для PocketPC, где нет FPU, поэтому все вычисления с целыми числами!
|
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |