我正在制作一小部分与渐变相关的类型/函数以供将来使用。我想确保至少有两个过程:ColorBetween 和 ColorsBetween。我可能只想获取任意 2 种颜色 (ColorsBetween) 之间的 TColor 数组,并且我可能只需要知道两种颜色 (ColorBetween) 之间的百分比的一个颜色值。
我已经在下面完成了大部分工作。除此之外,我有两个核心问题:
- 如何按给定百分比计算每个 RGB 通道的中间颜色? (请参阅下面我在哪里
[???]
)
- 完成我正在做的事情的最快方法是什么(同时保留两个不同的功能)?
这是代码:
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
to Percent: Single
获得更平滑的效果 - 不限于 100 个可能的值。