热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

GdiPlus[4]:TGPColor

为什么80%的码农都做不了架构师?TGPColor是GdiPlus的颜色主体,它虽然是个结构体,但和类一样,方法、属性一应俱全.之所以没有把它定义为类或接口,我

为什么80%的码农都做不了架构师?>>>   hot3.png


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

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

TGPColor 的多种构建方法:

varc1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11: TGPColor;
beginc1 := 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) 隐式转换, 所以:
varColor: TGPColor;
beginColor := $FF00FF00;ShowMessageFmt('$%x', [Color.Value]); //$FF00FF00
end;//反之亦然:
varNum: ARGB;
beginNum := TGPColor.Lime;ShowMessageFmt('$%x', [Num]); //$FF00FF00
end;

TGPColor 的属性:



varC: TGPColor;
beginC := 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);
varImage: IGPImage;Brush: IGPSolidBrush;Rect: TGPRect;
beginChDir('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;

效果图:

26153200_8cjE.png




转:https://my.oschina.net/hermer/blog/319490



推荐阅读
  • 这篇文章主要讲解了“GradeBook类怎么定义”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Grad ... [详细]
  • JS加密解密
    leta=汪政..222RRRp767868^*%^*%344h哈哈;letb=udp.d(ud(a));//需要加密的内容letc=udp. ... [详细]
  • 猪猪猫.CNWINXPSP2电脑城装机12DVD[豪华版]
    直接下载地址http:bt.jujumao.cn点击下载种子下载信息[点击浏览该文件:2007-12-19猪猪猫.cn-winxpsp2电脑城装机12豪华版.torrent]| ... [详细]
  • 使用Python中的Plotly绘制三维网格图原文:ht ... [详细]
  • 1.方法一:采用OleDB读取EXCEL文件:把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下:publicDa ... [详细]
  • Lunix历史及如何学习
    1.Lunix是什么1.1Lunix是操作系统还是应用程序Lunix是一套操作系统,它提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构, ... [详细]
  • 一个不错的JDBC连接池教程(带具体例子)
    1.前言数据库应用,在许多软件系统中经常用到,是开发中大型系统不可缺少的辅助。但如果对数据库资源没有很好地管理(如:没有及时回收数据库的游 ... [详细]
  • TLB 缓存延迟刷新漏洞 CVE201818281 解析 ... [详细]
  • 1、创建高级对象使用构造函数来创建对象构造函数是一个函数,调用它来例示并初始化特殊类型的对象。可以使用new关键字来调用一个构造函数。下面给出了使用构造函数的新示例。 ... [详细]
  • DDD在微服务架构中落地应用
    1DDDDomainDrivenDesign(领域驱动设计,DDD),不是一种架构,而是一种架构方法论,是一种拆解业务、划分业务、确定业 ... [详细]
  • 如何设计一个秒杀系统(各方面都写的很到位)
    1.Overview1.1并发读写秒杀要解决的主要问题是:并发读与并发写。并发读的优化理念是尽量减少用户到服务端来读数据,或者让他 ... [详细]
  • Qt 学习笔记(5)绘图   五子棋游戏
    在上一篇博客CQt学习笔记(4)绘图中介绍了Qt中的绘图方法,基于上一篇的博客的知识,使用QPainter设计一个五子棋的棋 ... [详细]
  • 1、背景-在项目的实施过程中,由于有dev环境和pro环境,这时会有两个redis集群,但是部分数据从甲方的三方数据库中获取存入生产环境的redis集群中,为了方便测试和数据校验, ... [详细]
  • 使用pm2方便开启node集群模式
    使用pm2方便开启node集群模式 ... [详细]
  • 变量 006
    为什么80%的码农都做不了架构师?变量是存储信息的容器。实例varx2;vary3;varzxy;就像代数那样x2y3zxy在代数中,我们 ... [详细]
author-avatar
276443071_7309cb
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有