|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
15.05.2009, 12:43 | #1 |
Регистрация: 15.05.2009
Сообщений: 4
|
Формула получения цвета с градиента
Нужна помощь в написании функции, которая получает цвет из градиента.
Дана определенная координата на которой один цвет переходит в другой, собственное сам градиент, нужно получить цвет из самого градиента, а собственно значение на в любой части отрезка. Собственно функция: есть два цвета допустим Red(255) и Yellow(65535), начальная точка на отрезке от куда начинается градиент и конечная точка на отрезке где заканчиваться градиент ну и ну и точка которая на отрезке которая и является нужным цветом со всего градиента. ...double Gradietn(int point, int gradientBegin, int gradientEnd, int color, int color2).... Gradient(60, -50, 80, 255, 65535); - на всем отрезке от -50 до 80 должен быть градиент от красного к желтому, все что больше 80 это уже чисто желтый, все что меньше -50 чисто красный, функция должна вернуть цвет который и есть точка 60. Большое спасибо |
15.05.2009, 22:57 | #2 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,551
|
А в что именно не получается?
E-Mail: arigato.freelance@gmail.com
|
18.05.2009, 10:26 | #3 |
Регистрация: 15.05.2009
Сообщений: 4
|
не знаю как сделать переход от градиента к градиенту, у меня переход получается не от к цвета к цвету, а появляются еще и лишние цвета. если делать переход от черного (0) к красному(255) то все красиво, а вот если другие цвета, желтый и красный то уже все.
|
18.05.2009, 13:42 | #4 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,551
|
Ну жёлтый - это красный + зеленый. Берем по максимуму красного и зелёного - получаем насыщенный жёлтый. Затем уменьшаем количество зелёного до 0, в конце получаем чисто красный.
E-Mail: arigato.freelance@gmail.com
|
18.05.2009, 14:05 | #5 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
все очень просто!
считаем рассотяние на котором определен градиент.(80-(-50))=130 далее находи кол-во цветов(65535-255)=65280 теперь находим кол-во цветов которое приходится на 1 px(65280/130) и вычисляем цвет в нужной точке(65280/130*(60-(-50))) PS. нужно сдвинуть систему координат так, чтобы не было отрицательных чисел или вообще воздержаться от них. |
18.05.2009, 16:20 | #6 |
Регистрация: 15.05.2009
Сообщений: 4
|
Костя, я тоже сначала так думал, таких расчетов у мну гора уже формулы 3 придумал, но должна же быть реально формула. По твоим расчетам получается приблизительно 55220, а этот цвет больше на зеленый похож чем на желтый.
Работать с RGB конечно тоже можно, но такая проблема, что да я то могу с двумя цветами градиент сделать, а вот если я задам другую комбинацию, если знаете как сделать универсальную формулу для получения цвета с градиента, только работая с RGB цветом, то в студию, буду рад. http://cloford.com/resources/colours/500col.htm |
18.05.2009, 17:05 | #7 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,551
|
Да это элементарно делается. Вот, набросал примерчик:
Код:
P.S. Просьба к модераторам: перенести тему в раздел "Мультимедиа в Delphi", т.к. она как раз для него. E-Mail: arigato.freelance@gmail.com
|
18.05.2009, 17:58 | #8 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Код:
width - ширина градиента begin и end - начальный и конечный цвет я разбиваю сначала начальный цвет на составляющие(т.к. в OGL я использую float для задания цвета, то делю 255, т.к. максимальное значение цвета 1.0) далее в переменные dr,dg,db я заношу число на которое нужно увеличивать или уменьшать начальный цвет. Это почти как вычислить dx. Если требуется за 30 итераций пройти от числа 10 до 60. Шаг = (60-10)/30=5/3 так и здесь с каждой составляющей цвета. Пример во вложении MV c++ 2008 express. Вывод при помощи opengl(glut) |
18.05.2009, 18:02 | #9 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,551
|
Прошу прощение, у меня на Делфи код, не заметил, что требовалось на Си.
Но принцип работы алгоритма от туда можно извлечь. E-Mail: arigato.freelance@gmail.com
|
19.05.2009, 18:13 | #10 |
Регистрация: 15.05.2009
Сообщений: 4
|
thanks
Arigato. тебе спасибо, алгоритм у тебя выдрал, то что ты на делфи написал, Косте тоже спасибо, что не поленился, тоже написал, но я уже до этого сделал как ты написал свой пост
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Алгоритм получения диапазона IP | zAlexandrz | Общие вопросы Delphi | 4 | 26.02.2010 22:43 |
Составить подпрограмму для получения обратной матрицы | Astis | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 01.05.2009 18:52 |
Проблема получения сертификата подписчика - CertFindCertificateInStore | _test_ | Win Api | 1 | 28.04.2009 18:42 |
Получения номера страницы по выделенной ячейки | brezze | Microsoft Office Excel | 1 | 11.07.2008 22:06 |
реализация метода приведённого градиента Вулфа в vba excel | Metal_Heart | Microsoft Office Excel | 1 | 12.05.2008 15:06 |