Вам нужно просто вырезать и вставить процедуру ниже в модуль и объявить функции в Вашем модуле.
Вы можете использьвать SetGradientColor2, чтобы получить цвет, который находится между двумя крайними цветами. Например, чтобы получить цвет, который находится ровно посередине, используйте это:
var
MyColor: TColor;
begin
R1 := 255;
G1 := 0;
B1 := 0;
R2 := 0;
G2 := 0;
B2 := 0;
Percent := 0.5;
MyNewColor := GetGradientColor2(
R1, G1, B1, R2, G2, B2, Percent);
Вы можете создать цикл от 0 до 1, чтобы получить все цвета хорошего градиента.
Функция GetGradientColor3 работает почти так же, за исключением того, что Вы можете получить цвет между тремя цветами, типа от красного к желтому и далее к синему.
function ColorFromRGB(Red, Green, Blue: Integer): Integer;
{ Возвращает цвет, составленный из красного,
синего и зеленого компонентов.
Red, Green и Blue может быть от 0 до 255.}
begin
{ Преобразовывает значения Red, Green и Blue в цвет.}
Result := Red + Green * 256 + Blue * 65536;
end;
function GetPigmentBetween(P1, P2, Percent: Double): Integer;
{ Возвращает число, которое является Percent между P1 и P2 }
begin
{ Находим число между P1 и P2 }
Result := Round(((P2 - P1) * Percent) + P1);
{ Удостоверьтесь, что мы в пределах цветов.}
if Result > 255 then
Result := 255;
if Result < 0 then
Result := 0;
end;
function GetGradientColor2(
R1, G1, B1, R2, G2, B2, Percent: Double): Integer;
{ Получаем цвет между определенными цветами (R1,G1,B1)
и (R2,G2,B2) в пределах Percent от 0 до 1.0 ( 0.5 = 50% )}
If percent = 0 then the color of (R1,G1,B1) is returned
If Percent = 1 then the color of (R2,G2,B2) is returned
if Percent is somewhere inbetween, then an inbetween color is returned.}
var
NewRed, NewGreen, NewBlue: Integer;
begin
{ Проверяем входящие данные. }
if Percent > 1 then
Percent := 1;
if Percent < 0 then
Percent := 0;
{Вычисляем компоненты Red, Green b Blue для нового цвета. }
NewRed := GetPigmentBetween(R1, R2, Percent);
NewGreen := GetPigmentBetween(G1, G2, Percent);
NewBlue := GetPigmentBetween(B1, B2, Percent);
{ Преобразовываем RGB в цвет }
Result := ColorFromRGB(NewRed, NewGreen, NewBlue);
end;
function GetGradientColor3(R1, G1, B1, R2, G2, B2, R3, G3, B3,
Percent: Double): Integer;
{ Получаем цвет, который является между тремя определенными цветами (R1,G1,B1),
(R2,G2,B2) и (R3,G3,B3). Похоже на GetGradientColor2,
за исключением того, что можно определить 3 цвета вместо 2.}
begin
{ Используем GetGradient2 для основной работы }
if Percent < 0.5 then
Result := GetGradientColor2(
R1, G1, B1, R2, G2, B2, Percent * 2
)
else
Result := GetGradientColor2(
R2, G2, B2, R3, G3, B3, (Percent - 0.5) * 2
);
end;
|