Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Ответ
 
Опции темы
Старый 20.05.2010, 00:24   #1
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Смущение Изменение параметров цвета

Нужно сделать алгоритм изменения параметра цвета как в фотошопе. Менюшка "Изображение -> Коррекция -> Цветовой тон/Насыщенность". Нужно реализовать эмуляцию трёх ползунков: цветовой тон, насыщенность, яркость. Читал это http://ru.wikipedia.org/wiki/HSV_(цветовая_модель) и это http://ru.wikipedia.org/wiki/HSL - первый алгоритм реализовывал - в принципе работает вроде, но насыщенность ведёт себя не так, как в фотошопе, когда убавляем её на полную, цвет становится черно-белым, но более светлым, чем в фотошопе. Склоняюсь к тому, что надо брать второй алгоритм. Но мне хочется редактировать каждый параметр отдельно, а не производить каждый раз конвертацию RGB -> HSV -> (изменяем нужный параметр H, S или V) -> RGB, чтобы работало быстрее, так как производить операции планируется не только над отдельными цветами, но и над картинками. Формулу изменения яркости, которая ведёт себя подобно фотошоповской я сделал. С цветовым тоном наверняка разберусь. А вот насыщенность никак не получается. Кто-нибудь может помочь? Хотя бы советами, рассуждениями. В инете пробовал искать, на русских сайтах ничего толкового не нашёл, а английский знаю плохо. И тут вдруг подумал, а ведь на булке много умных людей
(Offline)
 
Ответить с цитированием
Старый 22.05.2010, 16:31   #2
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений
(для 790 пользователей)
Ответ: Изменение параметров цвета

Потыкался в Paint.net
Минимальная насыщенность - R=G=B, оттенки серого. Максимальная - наоборот
Самое простое - при повышении насыщенности посчитать (R+G+B )/3, и если насыщенность надо повысить, то то значение что меньше среднего арифметического, уменьшать, то что больше - увеличивать
А вот как рассчитать, насколько повышать или понижать - не знаю
Глаз воспринимает яркость как логарифм, т.е. оценивает, что и во сколько раз ярче, по-моему, надо поэкспериментировать с разными вариантами и всё
Правда, есть мысль:
dR:=(R+G+B )/3-R
//dR - отличие от средней яркости
dR:=dR*k;
k - коэффициент изменения насыщенности
//при K=0 серые цвета
R:=(R+G+B )/3-dR
Что получится точно не знаю
(Offline)
 
Ответить с цитированием
Старый 23.05.2010, 08:33   #3
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Изменение параметров цвета

(R+G+B )/3
Я тоже по-началу так делал. Но проведя эксперименты в фотошопе и начитавшись литературы понял, что нужно делать (MIN+MAX)/2 , где MIN - значение минимального по уровню канала, а MAX - значение максимального. То есть как уменьшить насыщенность до нижней границы, я разобрался почти сразу. А вот как рассчитать максимальную... В принципе я вроде тоже понял, но не могу формулу вывести. Там получается куча условий и прочей фигни, что по количеству кода получается в два раза больше, чем полное преобразование RGB - HSV (HSL) - RGB. Пока так и сделал. Но хотелось бы разобраться до конца.
(Offline)
 
Ответить с цитированием
Старый 25.05.2010, 12:06   #4
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений
(для 790 пользователей)
Ответ: Изменение параметров цвета

Выложи формулы, по которым уменьшаешь, я попробую переделать их под увеличение.
P.S. желательно в языке паскаля
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Старый 25.05.2010, 13:29   #5
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Изменение параметров цвета

Там разные формулы. Нижняя граница вычисляется по формуле (MIN+MAX)/2, а граница самого насыщенного цвета зависит от нескольких факторов. Во-первых, учитывается то, что каждый из каналов не должен быть менее 0 и более 255. Сначала проверяем что меньше: MIN или (255-MAX). Берём меньшее из них, из значения минимального канала вычитаем это число, а к максимальному его прибавляем (в итоге получается, что либо минимальный станет равен нулю, либо максимальный станет равен 255, то есть за границы [0-255] ни один из них не выйдет). А вот с каналом, который лежит между значениями MIN и MAX, придётся производить отдельную содомию. Тут ща хз как описать попроще. Но короче все эти вычисления уже по коду занимают у меня места больше, чем конвертация RGB - HSV (HSL) - RGB , муть какая-то.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com