IGPLinearGradientBrush.Blend 属性对应一个 IGPBlend 对象;

TGPBlend.Create(Factors, Positions); 中的两个参数都是 Single 类型的数组,
Factors 颜色强度因子, Positions 是位置偏移比例.

对于两种颜色的渐变, 上面两个数组都应是三个元素构成; 默认效果是 [0, 0.5, 1].

测试效果图:



测试代码:

uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
var
  Graphics: IGPGraphics;
  Rect: TGPRectF;
  Brush: IGPLinearGradientBrush;
  StringFormat: IGPStringFormat;
  Font: IGPFont;
  BrushText: IGPSolidBrush;
begin
  Graphics := TGPGraphics.Create(Canvas.Handle);
  Rect.Initialize(20, 10, ClientWidth - 40, 30);
  Brush := TGPLinearGradientBrush.Create(Rect, $FFFF0000, $FF0000FF, 0);

  StringFormat := TGPStringFormat.Create;
  StringFormat.Alignment := StringAlignmentCenter;
  StringFormat.LineAlignment := StringAlignmentFar;

  Font := TGPFont.Create(Canvas.Handle);
  BrushText := TGPSolidBrush.Create($FFCCCCCC);

  Brush.Blend := TGPBlend.Create([0, 0.5, 1], [0, 0.5, 1]);
  Graphics.FillRectangle(Brush, Rect);
  Graphics.DrawString('[0, 0.5, 1], [0, 0.5, 1]', Font, Rect, StringFormat, BrushText);

  //
  Brush.Blend := TGPBlend.Create([0, 0.5, 1], [0, 0.2, 1]);
  Graphics.TranslateTransform(0, Rect.Y + Rect.Height);
  Graphics.FillRectangle(Brush, Rect);
  Graphics.DrawString('[0, 0.5, 1], [0, 0.2, 1]', Font, Rect, StringFormat, BrushText);

  Brush.Blend := TGPBlend.Create([0, 0.5, 1], [0, 0.8, 1]);
  Graphics.TranslateTransform(0, Rect.Y + Rect.Height);
  Graphics.FillRectangle(Brush, Rect);
  Graphics.DrawString('[0, 0.5, 1], [0, 0.8, 1]', Font, Rect, StringFormat, BrushText);
  
  //
  Brush.Blend := TGPBlend.Create([0, 0.2, 1], [0, 0.5, 1]);
  Graphics.TranslateTransform(0, Rect.Y + Rect.Height);
  Graphics.FillRectangle(Brush, Rect);
  Graphics.DrawString('[0, 0.2, 1], [0, 0.5, 1]', Font, Rect, StringFormat, BrushText);

  Brush.Blend := TGPBlend.Create([0, 0.8, 1], [0, 0.5, 1]);
  Graphics.TranslateTransform(0, Rect.Y + Rect.Height);
  Graphics.FillRectangle(Brush, Rect);
  Graphics.DrawString('[0, 0.8, 1], [0, 0.5, 1]', Font, Rect, StringFormat, BrushText);
  
  //
  Brush.Blend := TGPBlend.Create([0, 0.2, 1], [0, 0.2, 1]);
  Graphics.TranslateTransform(0, Rect.Y + Rect.Height);
  Graphics.FillRectangle(Brush, Rect);
  Graphics.DrawString('[0, 0.2, 1], [0, 0.2, 1]', Font, Rect, StringFormat, BrushText);

  Brush.Blend := TGPBlend.Create([0, 0.8, 1], [0, 0.8, 1]);
  Graphics.TranslateTransform(0, Rect.Y + Rect.Height);
  Graphics.FillRectangle(Brush, Rect);
  Graphics.DrawString('[0, 0.8, 1], [0, 0.8, 1]', Font, Rect, StringFormat, BrushText);

  //
  Brush.Blend := TGPBlend.Create([0, 0.2, 1], [0, 0.8, 1]);
  Graphics.TranslateTransform(0, Rect.Y + Rect.Height);
  Graphics.FillRectangle(Brush, Rect);
  Graphics.DrawString('[0, 0.2, 1], [0, 0.8, 1]', Font, Rect, StringFormat, BrushText);

  Brush.Blend := TGPBlend.Create([0, 0.8, 1], [0, 0.2, 1]);
  Graphics.TranslateTransform(0, Rect.Y + Rect.Height);
  Graphics.FillRectangle(Brush, Rect);
  Graphics.DrawString('[0, 0.8, 1], [0, 0.2, 1]', Font, Rect, StringFormat, BrushText);
end;

posted on 2009-12-14 21:35  万一  阅读(2010)  评论(4编辑  收藏  举报