Самый быстрый способ вычислить цвета для градиента?

Я создаю небольшую коллекцию типов / функций, связанных с градиентами, для будущего использования. Я хочу убедиться, что есть как минимум две процедуры: ColorBetween и ColorsBetween. Я могу просто получить массив TColor между любыми двумя цветами (ColorsBetween), и мне также может потребоваться знать одно значение цвета в процентах между двумя цветами (ColorBetween).

Я уже сделал это в основном ниже. Кроме того, у меня есть два основных вопроса:

  1. Как мне рассчитать промежуточный цвет каждого канала RGB по заданному проценту? (См. Ниже, где у меня [???] )
  2. Какой самый быстрый способ выполнить то, что я делаю (с сохранением двух разных функций)?

Вот код:

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  StrUtils, StdCtrls, Math;

type
  TColorArray = array of TColor;

implementation

function ColorsBetween(const ColorA, ColorB: TColor; const Count: Integer): TColorArray;
var
  X: Integer; //Loop counter
begin
  SetLength(Result, Count);
  for X:= 0 to Count - 1 do 
    Result[X]:= ColorBetween(ColorA, ColorB, Round((X / Count) * 100)); //Correct?
end;

function ColorBetween(const ColorA, ColorB: TColor; const Percent: Single): TColor;
var
  R1, G1, B1: Byte;
  R2, G2, B2: Byte;
begin
  R1:= GetRValue(ColorA);
  G1:= GetGValue(ColorA);
  B1:= GetBValue(ColorA);
  R2:= GetRValue(ColorB);
  G2:= GetGValue(ColorB);
  B2:= GetBValue(ColorB);
  Result:= RGB(
    EnsureRange(([???]), 0, 255),
    EnsureRange(([???]), 0, 255),
    EnsureRange(([???]), 0, 255)
  );
end;

EDIT: Изменено Percent: Integer на Percent: Single для получения более плавного эффекта - не ограничено 100 возможными значениями.

8
задан Jerry Dodge 24 November 2011 в 07:42
поделиться