Я нашёл этот код, но мне нужен перелив цветов от красного до синего (через зелёный, по спектру). А этот делает перелив от синего до красного и снова до синего.
Код
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;
Что нужно изменить?
такая палитра пойдет?
Код
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;
хоть и не совсем по спектру... фиолетового нет, да и зависимость линейная...
если нужен фиолетовый, тогда на три части подели диапазон, а не на две, как у меня... но тогда к красному все вернется
Бродяжник
23.07.2004 16:08
Господа, раз уж речь зашла о спектрах, подскажите, пожалуйста, как вообще получить на экране плавный переход хотя бы от черного к белому, то есть от $000000 до $FFFFFF. Нет, вычислить это я могу. Но когда этими вычисленными по науке цветами рисуешь на canvas'e, получается жуткая зебра. Хорошо, оставим смешение цветов, возьмем от черного к красному, то есть от $000000 до $0000FF. Так опять ведь зебра выходит, если идти через 1. В полной мере ожиданиям соответсвуют только 8 цветов - чистые R,G,B, их смеси и черный цвет. А где мои 16 лет... то есть "16 миллионов цветов"? Как мне их расположить в человеческом порядке?
Хотя...
жёлтого тоже хочется.
Бродяжник по 255 градаций каждой компоненты - это и есть 24-битный цвет (256*256*256=16777216)... какие нафиг полосы? ты наверное в 256-цветном режиме смотришь?
romtekоткрой где-нибудь диалог выбора цвета и возьми оттуда несколько ключевых точек на нужные цвета, а потом проинтерполируй, наверное даже линейной хватит
Бродяжник
27.07.2004 14:59
To P@sh@
Сорри...
Плохо быть таким бестолковым. Это у меня мозги слегка перекосило. Написал три программы - на Паскале, на Дельфи+GDI, на Дельфи+OpenGL - и всюду сделал одну и ту же ошибку. Вместо "1" написал "i".
На выходных отдохнул, мозги прояснились... <_< В общем, если это полезно, сейчас попробую прикрепить файл с плодами своих изысканий...