Как создать цветовую схему градиента

Тема в разделе "Delphi", создана пользователем WinHack, 28 ноя 2016.

  1. WinHack
    Вам нужно просто вырезать и вставить процедуру ниже в модуль и объявить функции в Вашем модуле.

    Вы можете использьвать 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;