GdiPlus[13]: IGPLinearGradientBrush 之多色渐变

2014/09/26 15:37
阅读数 65

多色渐变需要: 一个 "颜色数组" 和一个 "位置数组" (0-1 之间的位置比例);

IGPLinearGradientBrush.InterpolationColors 属性对应一个 IGPColorBlend 对象, 此对象专门用于装载上面两个数组.

IGPColorBlend 的 Colors 和 Positions 两个属性分别对应这两个数组.

下面的三个示例的结果都是一样的.

测试效果图:



测试一, 使用开放数组参数构建 IGPColorBlend

uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
const
  C1 = $FF000000;
  C2 = $FFFF0000;
  C3 = $FFFFFF00;
  C4 = $FFFF0000;
  C5 = $FF000000;
var
  Graphics: IGPGraphics;
  Rect: TGPRect;
  Brush: IGPLinearGradientBrush;
  ColorBlend: IGPColorBlend;
begin
  Graphics := TGPGraphics.Create(Canvas.Handle);
  Rect.Initialize(ClientRect);
  Brush := TGPLinearGradientBrush.Create(Rect, 0, 0, 0);

  ColorBlend := TGPColorBlend.Create([C1, C2, C3, C4, C5], [0, 0.25, 0.5, 0.75, 1]);
  Brush.InterpolationColors := ColorBlend;

  Graphics.FillRectangle(Brush, Rect);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  Repaint;
end;

 
 
 
 
 

 

 

  
  

测试二, 使用静态数组参数构建 IGPColorBlend:

uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
var
  Graphics: IGPGraphics;
  Rect: TGPRect;
  Brush: IGPLinearGradientBrush;
  ColorBlend: IGPColorBlend;
  cs: array[0..4] of TGPColor;
  ps: array[0..4] of Single;
begin
  Graphics := TGPGraphics.Create(Canvas.Handle);
  Rect.Initialize(ClientRect);
  Brush := TGPLinearGradientBrush.Create(Rect, 0, 0, 0);

  cs[0] := $FF000000;
  cs[1] := $FFFF0000;
  cs[2] := $FFFFFF00;
  cs[3] := $FFFF0000;
  cs[4] := $FF000000;

  ps[0] := 0;
  ps[1] := 0.25;
  ps[2] := 0.5;
  ps[3] := 0.75;
  ps[4] := 1;

  ColorBlend := TGPColorBlend.Create(cs, ps);
  Brush.InterpolationColors := ColorBlend;

  Graphics.FillRectangle(Brush, Rect);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  Repaint;
end;

 
 
 
 
 

 

 

  
  

测试三, 使用数组常量或动态数组参数构建 IGPColorBlend:

uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
const
  ps: array[0..4] of Single = (0, 0.25, 0.5, 0.75, 1);
var
  Graphics: IGPGraphics;
  Rect: TGPRect;
  Brush: IGPLinearGradientBrush;
  ColorBlend: IGPColorBlend;
  cs: array of TGPColor;
begin
  Graphics := TGPGraphics.Create(Canvas.Handle);
  Rect.Initialize(ClientRect);
  Brush := TGPLinearGradientBrush.Create(Rect, 0, 0, 0);

  SetLength(cs, 5);
  cs[0] := $FF000000;
  cs[1] := $FFFF0000;
  cs[2] := $FFFFFF00;
  cs[3] := $FFFF0000;
  cs[4] := $FF000000;

  ColorBlend := TGPColorBlend.Create(cs, ps);
  Brush.InterpolationColors := ColorBlend;

  Graphics.FillRectangle(Brush, Rect);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  Repaint;
end;

 
 
 
 
 

 

 

  
  

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部