zoukankan      html  css  js  c++  java
  • GdiPlus[14]: IGPLinearGradientBrush 之 Blend


    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;
    
  • 相关阅读:
    题解 P1030 【求先序排列】
    行列式及其打开方式
    题解 P2580 【于是他错误的点名开始了】
    题解 P1130 【红牌】
    题解 P5239 【回忆京都】
    题解 P1184 【高手之在一起】
    【笔记】自学ST表笔记
    题解 P1208 【[USACO1.3]混合牛奶 Mixing Milk】
    树状数组自学笔记
    EBS R12.2系统logo的修改
  • 原文地址:https://www.cnblogs.com/del/p/1624117.html
Copyright © 2011-2022 走看看