![]() |
Изменение параметров цвета
Нужно сделать алгоритм изменения параметра цвета как в фотошопе. Менюшка "Изображение -> Коррекция -> Цветовой тон/Насыщенность". Нужно реализовать эмуляцию трёх ползунков: цветовой тон, насыщенность, яркость. Читал это http://ru.wikipedia.org/wiki/HSV_(цветовая_модель) и это http://ru.wikipedia.org/wiki/HSL - первый алгоритм реализовывал - в принципе работает вроде, но насыщенность ведёт себя не так, как в фотошопе, когда убавляем её на полную, цвет становится черно-белым, но более светлым, чем в фотошопе. Склоняюсь к тому, что надо брать второй алгоритм. Но мне хочется редактировать каждый параметр отдельно, а не производить каждый раз конвертацию RGB -> HSV -> (изменяем нужный параметр H, S или V) -> RGB, чтобы работало быстрее, так как производить операции планируется не только над отдельными цветами, но и над картинками. Формулу изменения яркости, которая ведёт себя подобно фотошоповской я сделал. С цветовым тоном наверняка разберусь. А вот насыщенность никак не получается. Кто-нибудь может помочь? Хотя бы советами, рассуждениями. В инете пробовал искать, на русских сайтах ничего толкового не нашёл, а английский знаю плохо. И тут вдруг подумал, а ведь на булке много умных людей :-D
|
Ответ: Изменение параметров цвета
Потыкался в 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 Что получится точно не знаю |
Ответ: Изменение параметров цвета
Цитата:
|
Ответ: Изменение параметров цвета
Выложи формулы, по которым уменьшаешь, я попробую переделать их под увеличение.
P.S. желательно в языке паскаля |
Ответ: Изменение параметров цвета
Там разные формулы. Нижняя граница вычисляется по формуле (MIN+MAX)/2, а граница самого насыщенного цвета зависит от нескольких факторов. Во-первых, учитывается то, что каждый из каналов не должен быть менее 0 и более 255. Сначала проверяем что меньше: MIN или (255-MAX). Берём меньшее из них, из значения минимального канала вычитаем это число, а к максимальному его прибавляем (в итоге получается, что либо минимальный станет равен нулю, либо максимальный станет равен 255, то есть за границы [0-255] ни один из них не выйдет). А вот с каналом, который лежит между значениями MIN и MAX, придётся производить отдельную содомию. Тут ща хз как описать попроще. Но короче все эти вычисления уже по коду занимают у меня места больше, чем конвертация RGB - HSV (HSL) - RGB :-D , муть какая-то.
|
Часовой пояс GMT +4, время: 05:54. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot