Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как можно попроще сделать градацию цвета [D4]


Сергей Ф. ©   (2003-12-11 17:20:00) 

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

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

Спасибочки.


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

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

SortValues;

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

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

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


BOA_KAA   (2003-12-11 17:53:00) [2]

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

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;


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


Наверх

Титульная страница Поиск, карта сайта Написать письмо