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;
    
  • 相关阅读:
    Android高级控件(四)——VideoView 实现引导页播放视频欢迎效果,超级简单却十分的炫酷
    Android源代码文件夹结构说明
    IOS-Storyboard控制器切换之TabBar(3)
    若干排序算法简单汇总(一)
    Linux地址ping不通情况怎么办?
    pve三种操作方式
    Office Add-in 设计规范与最佳实践
    编辑您的代码
    持续集成
    人工智能到底能给我们带来什么?
  • 原文地址:https://www.cnblogs.com/del/p/1624117.html
Copyright © 2011-2022 走看看