zoukankan      html  css  js  c++  java
  • GdiPlus[4]: TGPColor


    TGPColor 是 GdiPlus 的颜色主体, 它虽然是个结构体, 但和类一样, 方法、属性一应俱全.

    之所以没有把它定义为类或接口, 我觉得主要是它需要和一个整数值进行隐式转换, 这要用到运算符重载(暂时只有结构有).

    TGPColor 的多种构建方法:

    var
      c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11: TGPColor;
    begin
      c1 := TGPColor.Create(0, 0, 255);          { 不透明蓝色 }
      c2 := TGPColor.Create(255, 0, 0, 255);     { 不透明蓝色 }
      c3 := TGPColor.Create(128, 0, 0, 255);     { 半透明蓝色 }
      c4 := TGPColor.Create($800000FF);          { 半透明蓝色 }
      c5 := TGPColor.MakeARGB(128, 0, 0, 255);   { 半透明蓝色 }
      c6 := TGPColor.CreateFromColorRef(clBlue); { 半透明蓝色, 参数是 Delphi 传统格式的颜色值 }
    
      c7.Initialize(0, 0, 255);                  { 不透明蓝色 }
      c8.Initialize(128, 0, 0, 255);             { 半透明蓝色 }
      c9.Initialize($800000FF);                  { 半透明蓝色 }
      c10.InitializeFromColorRef(clBlue);        { 不透明蓝色, 参数是 Delphi 传统格式的颜色值 }
    
      c11 := TGPColor.Blue;                      { 不透明蓝色, 这是 TGPColor 中 141 个颜色常量之一 }
    end;
    
    //因为 TGPColor 使用运算符重载: TGPColor 可与 ARGB(Cardinal) 隐式转换, 所以:
    var
      Color: TGPColor;
    begin
      Color := $FF00FF00;
      ShowMessageFmt('$%x', [Color.Value]); //$FF00FF00
    end;
    
    //反之亦然:
    var
      Num: ARGB;
    begin
      Num := TGPColor.Lime;
      ShowMessageFmt('$%x', [Num]);         //$FF00FF00
    end;
    

    TGPColor 的属性:

    var
      C: TGPColor;
    begin
      C := TGPColor.Create($11, $22, $33, $44);
    
      { TGPColor.Value 是颜色值 }
      ShowMessageFmt('$%x', [C.Value]);    //$11223344
    
      { TGPColor.ColorRef 是 Delphi 传统格式的颜色值 }
      ShowMessageFmt('$%x', [C.ColorRef]); //$443322
    
      { Alpha、Red、Green、Blue 各分量 }
      ShowMessageFmt('$%.2x, $%.2x, $%.2x, $%.2x', [C.A, C.R, C.G, C.B]); //$11, $22, $33, $44
    
      { TGPColor.Alpha 与 TGPColor.A 是一回事 }
      ShowMessageFmt('$%.2x, $%.2x', [C.Alpha, C.A]); //$11, $11
    end;
    

    透明色演示代码:

    uses GdiPlus, GdiPlusHelpers;
    
    procedure TForm1.FormPaint(Sender: TObject);
    var
      Image: IGPImage;
      Brush: IGPSolidBrush;
      Rect: TGPRect;
    begin
      ChDir('C:\GdiPlusImg\');
      Image := TGPImage.Create('Grapes.jpg');
      Canvas.ToGPGraphics.DrawImage(Image, 20, 10);
    
      Rect.Initialize(0, 20, Image.Width + 40, 35);
      Brush := TGPSolidBrush.Create(TGPColor.Create(255, 0, 128, 255));
      Canvas.ToGPGraphics.FillRectangle(Brush, Rect);
    
      Rect.Y := Rect.Y + Rect.Height + 20;
      Brush := TGPSolidBrush.Create(TGPColor.Create(127, 0, 128, 255));
      Canvas.ToGPGraphics.FillRectangle(Brush, Rect);
    
      Rect.Y := Rect.Y + Rect.Height + 20;
      Brush := TGPSolidBrush.Create(TGPColor.Create(63, 0, 128, 255));
      Canvas.ToGPGraphics.FillRectangle(Brush, Rect);
    end;
    

    效果图:



  • 相关阅读:
    centos7下mysql双主+keepalived
    Nginx 性能优化有这篇就够了!
    mysql对自增主键ID进行重新排序
    nginx 配置文件 2019-12-20
    zabbix服务端接收的数据类型,便于编写脚本向服务端提交数据
    zabbix自动注册,实现自动添加机器,减少人工干预
    zabbix企业微信告警配置教程
    websocket 连接测试端口服务是否正常代码
    mongodb Sort排序能够支持的最大内存限制为32M Plan executor error during find: FAILURE
    rabbitmq 的安装配置使用
  • 原文地址:https://www.cnblogs.com/del/p/1622268.html
Copyright © 2011-2022 走看看