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;