GdiPlus[14]: IGPLinearGradientBrush 之 Blend


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

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

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

测试效果图:

GdiPlus[14]: IGPLinearGradientBrush 之 Blend

测试代码:


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;


 
   

你可能感兴趣的:(Blend)