文档章节

GdiPlus[4]: TGPColor

涂孟超
 涂孟超
发布于 2014/09/26 15:32
字数 446
阅读 5
收藏 0

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;

 
 
 
 
 

 

 

  

效果图:



本文转载自:http://www.cnblogs.com/del/archive/2009/12/12/1622268.html

上一篇: 其它 Helper
下一篇: Direct2D (15) : 剪辑
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
GDI+里面的问题。。。。。。。。。。

error C2248: “Gdiplus::Bitmap::Bitmap”: 无法访问 private 成员(在“Gdiplus::Bitmap”类中声明) 1> c:\program files\microsoft sdks\windows\v7.0a\include\gdiplusheaders.h(630) : ......

xxdd
2013/10/24
74
0
vs 2005 添加GDI配置

在VS2005当中由于自带了GDI+的开发包,所以不需要在安装GDI开发包,这些头文件的位置由VS中的$(WindowsSdkDir)/include自动包含进来了 下午自己添加了好几次,总是出现有报错,,在 stdafx.h...

种地瓜
2015/12/08
133
0
MFC用GDI+动感歌词的制作

源代码:http://download.csdn.net/detail/nuptboyzhb/4219669 源代码: 1. 插入一个对话框的资源,删除默认控件,并为对话框创建一个类,命名为ClyricDlg; 2. 在对话框的头文件中添加GDI+相...

长平狐
2012/10/08
259
0
用C++实现半透明按钮控件(PNG,GDI+)

使用MFC实现上面的按钮半透明效果能看到父窗口中的内容,上面是效果图(一个是带背景图片的、另一个是不带的)。 控件继承自CWnd类(彩色的部分是窗口的背景图片、按钮是PNG图片,第二个图标是鼠...

shzwork
09/17
4
0
Wine 1.3.16 发布

下载地址: http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.3.16.tar.bz2 更新内容: New version of the Gecko engine, based on Firefox 4. Better support for Dwarf debuggi......

红薯
2011/03/19
524
3

没有更多内容

加载失败,请刷新页面

加载更多

查看线上日志常用命令

cat 命令(文本输出命令) 通常查找出错误日志 cat error.log | grep 'nick' , 这时候我们要输出当前这个日志的前后几行: 显示file文件里匹配nick那行以及上下5行 cat error.log | grep -C ...

xiaolyuh
9分钟前
3
0
六、Java设计模式之工厂方法

工厂方法定义: 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 类型:创建型 工厂方法-使用场景: 创建对象需要大量重复的代码 ...

东风破2019
16分钟前
2
0
win服务器管理遇到的一系列问题记录

有些小伙伴在使用iis7远程桌面管理工具的时候总是会遇到一系列的问题,下面就是为大家介绍一下服务器日常管理过程中出现的问题及我的解决办法和心得。希望能帮到大家。   拒绝服务器重新启...

1717197346
23分钟前
2
0
flutter 剪切板 复制粘贴

复制粘贴功能 import 'package:flutter/services.dart'; Clipboard.setData(ClipboardData(text:_text));Clipboard.getData;...

zdglf
26分钟前
2
0
如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?

面试题 如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题? 面试官心理分析 这个是肯定的,用 MQ 有个基本原则,就是数据不能多一条,也不能少一条,不能多,就是前面说的重复消费...

米兜
26分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部