Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Написание игр _ Палитра из цветов радуги

Автор: Romtek 23.07.2004 4:54

Я нашёл этот код, но мне нужен перелив цветов от красного до синего (через зелёный, по спектру). А этот делает перелив от синего до красного и снова до синего.

Код
type
rgb = record
 r,
 g,
 b : byte
end;
paltype  = array[0..255] of rgb;

procedure GradientPal (var pal: paltype);
var i: byte;
begin
    For I := 0 To 255 Do
    with pal[i] do
    begin
         r := Round (Abs (127.0 * sin ( I * Pi/256.0)));
         g := Round (Abs (127.0 * sin ( I * Pi/128.0)));
         b := Round (Abs (127.0 * cos ( I * Pi/256.0)))
    end;
end;

Что нужно изменить?

Автор: P@sh@ 23.07.2004 14:31

такая палитра пойдет?

Код

 for i:=0 to 255 do with pal[i] do begin
   if i>127 then r:=0 else r:=(128-i)*2;
   if i<128 then b:=0 else b:=(i-128)*2;
   if i<128 then g:=255-r else g:=255-b;
 end;

хоть и не совсем по спектру... фиолетового нет, да и зависимость линейная...

Автор: P@sh@ 23.07.2004 14:33

если нужен фиолетовый, тогда на три части подели диапазон, а не на две, как у меня... но тогда к красному все вернется

Автор: Бродяжник 23.07.2004 16:08

Господа, раз уж речь зашла о спектрах, подскажите, пожалуйста, как вообще получить на экране плавный переход хотя бы от черного к белому, то есть от $000000 до $FFFFFF. Нет, вычислить это я могу. Но когда этими вычисленными по науке цветами рисуешь на canvas'e, получается жуткая зебра. Хорошо, оставим смешение цветов, возьмем от черного к красному, то есть от $000000 до $0000FF. Так опять ведь зебра выходит, если идти через 1. В полной мере ожиданиям соответсвуют только 8 цветов - чистые R,G,B, их смеси и черный цвет. А где мои 16 лет... то есть "16 миллионов цветов"? Как мне их расположить в человеческом порядке?

Автор: Romtek 23.07.2004 16:21

Цитата(P@sh@)
такая палитра пойдет?
Именно то, что надо!
Спасибо!

Автор: Romtek 23.07.2004 16:27

Хотя...
жёлтого тоже хочется.

Автор: P@sh@ 23.07.2004 21:48

Бродяжник
по 255 градаций каждой компоненты - это и есть 24-битный цвет (256*256*256=16777216)... какие нафиг полосы? ты наверное в 256-цветном режиме смотришь? smile.gif

romtek
открой где-нибудь диалог выбора цвета и возьми оттуда несколько ключевых точек на нужные цвета, а потом проинтерполируй, наверное даже линейной хватит

Автор: Бродяжник 27.07.2004 14:59

To P@sh@
Сорри... huh.gif Плохо быть таким бестолковым. Это у меня мозги слегка перекосило. Написал три программы - на Паскале, на Дельфи+GDI, на Дельфи+OpenGL - и всюду сделал одну и ту же ошибку. Вместо "1" написал "i".
На выходных отдохнул, мозги прояснились... <_< В общем, если это полезно, сейчас попробую прикрепить файл с плодами своих изысканий...


Прикрепленные файлы
Прикрепленный файл  Raduga.zip ( 127.7 килобайт ) Кол-во скачиваний: 328