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;