Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Как можно попроще сделать градацию цвета   Найти похожие ветки 

 
Сергей Ф.   (2003-12-11 17:20) [0]

Здаствуй АЛЛ!!!
поможите с вопросом, уже запутался.

Как можно попроще сделать градацию цвета, из (а) -> (в),
выбот делает юзер.
Пример: из зелёного в красный.

Спасибочки.


 
BOA_KAA ©   (2003-12-11 17:53) [1]

Куда уж проще...

procedure TLineInterpolation.SetIntervals;
var
 RGBFrom: array[0..2] of Byte; //значения R, G, B составляющих первого цвета
 RGBDiff: array[0..2] of Integer; // разница между R, G, B составляющими
                                  // первого и второго цветов
 I: Integer;
 R: Byte; //R-составляющая цвета интервала
 G: Byte; //G-составляющая цвета интервала
 B: Byte; //B-составляющая цвета интервала
begin
 // Извлекаем R, G, B составляющие
 RGBFrom[0]:=GetRValue(ColorToRGB(FFromRGB));
 RGBFrom[1]:=GetGValue(ColorToRGB(FFromRGB));
 RGBFrom[2]:=GetBValue(ColorToRGB(FFromRGB));

 // Вычисляем разницу
 RGBDiff[0]:=GetRValue(ColorToRGB(FToRGB))-RGBFrom[0];
 RGBDiff[1]:=GetGValue(ColorToRGB(FToRGB))-RGBFrom[1];
 RGBDiff[2]:=GetBValue(ColorToRGB(FToRGB))-RGBFrom[2];

 SortValues;

 // Длина массива интервалов
 // NIntervals:=ValueCount-1;
 SetLength(FColors, NIntervals);
 SetLength(Interval, NIntervals);
 for I:=0 to NIntervals-1 do
 begin
   //Установка левой и правой границы интервала
   Interval[I].Left:=Value[I];
   Interval[I].Right:=Value[I+1];

   // Вычисляем составляющие цвета интервала
   R:=RGBFrom[0]+MulDiv(I, RGBDiff[0], NIntervals-1);
   G:=RGBFrom[1]+MulDiv(I, RGBDiff[1], NIntervals-1);
   B:=RGBFrom[2]+MulDiv(I, RGBDiff[2], NIntervals-1);

   // Микшируем R, G, B составляющие в цвет интервала
   Interval[I].Color:=RGB(R, G, B);
   FColors[I]:=Interval[I].Color;
 end;
end;


Это метод из моего класса. Разберешься, я думаю...


 
Сергей Ф.   (2003-12-11 21:39) [2]

Если можно подробней ту часть после

SortValues;

что там за переменные.
SetLength(FColors, NIntervals); ?
SetLength(Interval, NIntervals); ?

Interval[I].Left:=Value[I]; ?
Interval[I].Right:=Value[I+1]; ?

Очень сложно пока разобратся, я ещё не такой спец.



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.029 c
1-1080207401
Vyacheslav
2004-03-25 12:36
2004.04.11
Определить WinXP


1-1082637558
serg128
2004-04-22 16:39
2004.04.11
Как отловить событие в Excel?


3-1079068666
Gerderic
2004-03-12 08:17
2004.04.11
SQL & FireBird


14-1081911090
Ильш
2004-04-14 06:51
2004.04.11
ВСЕМ ! ВСЕМ ! ВСЕМ !


4-1079598088
Radiant
2004-03-18 11:21
2004.04.11
Смена шрифтов в стандартных диалогах и на Caption е формы