Как создать цветовую схему градиента
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;
Комментарии