|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
29.03.2013, 20:27 | #1 |
Сама себе режиссер
Старожил
Регистрация: 27.04.2007
Сообщений: 3,365
|
Подобие градиента
Есть два цвета, допустим 0хFF13A4 и 0x25CCFF (цвета могут быть любые). И есть 10 (не важно, сколько. Но пусть будет 10 для того, чтобы можно было составить какое-то процентное соотношение - пока что я вижу так решение задачи) квадратиков, расположенных в линию. Цвет первого и последнего квадратиков совпадает с заданными цветами соответственно. Те квадраты, которые находятся между ними раскрашены промежуточными цветами из заданного диапазона.
Как, собственно, это реализовать (без привязки к языковым функциям)? Я подозреваю, что здесь будут замешаны битовые операции. Только не понимаю, каким образом можно приблизить один цвет на 10% к другому...
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
Последний раз редактировалось ACE Valery; 29.03.2013 в 22:54. |
29.03.2013, 20:34 | #2 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,300
|
Например, color = color1 + (i/10) * (color2 - color1), где i от 1 до 9.
Можно делать для цвета, как числа, либо разбивать цвет на каналы и делать так для каждого канала. ПС Градиент, поточечно сгенерированный в дельфи.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
Последний раз редактировалось BDA; 29.03.2013 в 20:39. |
29.03.2013, 21:00 | #3 |
Сама себе режиссер
Старожил
Регистрация: 27.04.2007
Сообщений: 3,365
|
Не-а, не катит Ну то есть выпадает совсем не тот цвет. Ни при полном изменении цвета, ни при поканальном. Возможно, связано с тем, что в Делфи как-то по-другому операции с цветами работают
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
|
29.03.2013, 21:13 | #4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
I'm learning to live...
|
29.03.2013, 21:20 | #5 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,300
|
Хм, у меня поканальный нормально работает.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
29.03.2013, 22:40 | #6 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
Если использовать integer переменные приведенная формула не сработает: 1/10 в целочисленной арифметике будет 0. Сначала умножайте, потом делите. IMHO использовать платформенное API лучше - весьмя вероятно, что градиент будет делать железо.
|
29.03.2013, 22:44 | #7 | |
Сама себе режиссер
Старожил
Регистрация: 27.04.2007
Сообщений: 3,365
|
Всем спасибо! Помогло. Итак, отчитываюсь:
Код:
Код:
UPD: Цитата:
ПыСы: у нас 8/10 будет 0.8 даже если использовать в интовом выражении.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
Последний раз редактировалось ACE Valery; 29.03.2013 в 22:52. |
|
29.03.2013, 22:47 | #8 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,300
|
ACE Valery, я не имел ввиду, что поканальное преобразование и преобразование сразу всего цвета дадут одинаковый результат.
Зря написал про переход сразу всего цвета
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
30.03.2013, 11:17 | #9 | |||
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Цитата:
Правда, здесь существует несколько неоднозначностей. 1. Вид интерполяции. В принципе, их достаточно много разных, но если исходить из того, что точек именно две, то выбора, по сути и не остается - только линейная. 2. Цветовое пространство. Вот здесь неоднозначность имеет место. Действительно, по сути нам нужно отметить в этом пространстве 2 точки, провести через них прямую, и взять цвета, равномерно расположенные на отрезке между этими двумя точками. Все. Проблема лишь в том, что цветовые пространства бывают различными, а потому то, что в ордном пространстве будет прямой, в другом превратится в кривую. Теперь пару замечаний: 1. К "языковым функциям" это не имеет ни малейшего отношения. И иметь не может. На любом языке это реализуется совершено одинаково точно так же, как фундаментальные математические законы не зависят (да и не могут зависеть) от языка программирования. 2. Битовые операции - явно шаг не в том направлении. Повторюсь: здесь нужна интерполяция. По хорошему, это операции с вещественными числами. Цитата:
Собственно, это объяснение нужно прежде всего Вам, чтобы Вы поняли, чего именно хотите (ну и смогли это сформулировать и объяснить нам - но это уже второстепенная задача). Вообще же, как я уже писал, результаты могут сильно меняться в зависимости от выбранного цветового пространства. В частности, предложенный в сообщении #2 вариант может рассматриваться как иллюстрация, но вряд ли пригоден для реального использования. Цитата:
Вы написали все верно. Просто, чтобы воспользоваться Вашим советом, нужно понимать, что цвет - вектор, а не скаляр, и операции над цветом - векторные операции. Последний раз редактировалось Stilet; 30.03.2013 в 12:06. |
|||
30.03.2013, 15:00 | #10 | ||
Сама себе режиссер
Старожил
Регистрация: 27.04.2007
Сообщений: 3,365
|
Госспади... А теорему Пифагора можно выводить из каких-то логических соображений, а можно использовать знание формулы о сумме квадратов катетов. А законы физики Земли не такие, как законы физики в какой-нибудь далекой-далекой галактике. А подключение к базе данных можно писать и на машинных кодах. Не нужно усложнять, иначе у меня возникает ощущение, что я не адекватно задаю вопросы, и сразу хочется себя забанить за это.
По паре замечаний: 1. Для создания цвета в одном языке есть функция new RGB(r, g, b), в другом - createColor(r, g, b), в третьем new RgbColor(r, g, b). Изменение цвета в одном transformColor, в другом еще как-то. 2. Очень даже в битовых операциях. Код я привела выше. Цитата:
Цитата:
Смотрите на мир проще, тем более, я отчиталась, что моя задача полностью решена с помощью вышеприведенных ребятами советов.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
|
||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
итерации методом градиента | маленький монстрик | Помощь студентам | 6 | 03.01.2011 19:43 |
Использование градиента в качестве фона. | vedro-compota | HTML и CSS | 7 | 06.10.2010 11:12 |
Подсчет градиента яркости (математический расчет градиента) | Hellrazah | Помощь студентам | 0 | 04.06.2010 20:21 |
Формула получения цвета с градиента | strel-core | Общие вопросы C/C++ | 9 | 19.05.2009 18:13 |