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

GDI+ 有五种画刷:

实心画刷: IGPSolidBrush
阴影画刷: IGPHatchBrush
纹理画刷: IGPTextureBrush
线性渐变画刷: IGPLinearGradientBrush
路径渐变画刷: IGPPathGradientBrush

它们分别有对应的实现类:
TGPSolidBrush
TGPHatchBrush
TGPTextureBrush
TGPLinearGradientBrush
TGPPathGradientBrush.

五个画刷都继承自 IGPBrush, 但 IGPBrush 只能通过其子类实现, 没有对应的 TGPBrush.

IGPBrush 只有两个有意义的成员:
IGPBrush.Clone 方法: 克隆对象; 系列中大多接口提供了这个方法以方便对象复制.
IGPBrush.BrushType 只读属性: 其对应的枚举当然会有五个元素, 分别对应上面五种画刷.

下面的例子是 BrushType 属性的测试:


uses GdiPlus, TypInfo;procedure TForm1.Button1Click(Sender: TObject);
varB1,B2,B3,B4,B5: IGPBrush; //定义五个画刷, 将要生成五种不同类型的画刷T1,T2,T3,T4,T5: string;   //用于获取画刷类型C1,C2: TGPColor;Pt1,Pt2: TGPPoint;Image: IGPImage;Path: IGPGraphicsPath;
begin{生成下面画刷需要的参数}C1 := $FFFF0000;C2 := $FF666666;Pt1.Initialize(0, 0);Pt2.Initialize(10, 10);Image := TGPImage.Create('C:\GdiPlusImg\Texture.jpg');Path := TGPGraphicsPath.Create;Path.AddEllipse(0, 0, 10, 10);{分别生成五种不同类型的画刷}B1 := TGPSolidBrush.Create(C1);B2 := TGPHatchBrush.Create(HatchStyleHorizontal, C1, C2);B3 := TGPTextureBrush.Create(Image);B4 := TGPLinearGradientBrush.Create(Pt1, Pt2, C1, C2);B5 := TGPPathGradientBrush.Create(Path);{获取各画刷的枚举名称}T1 := GetEnumName(TypeInfo(TGPBrushType), Ord(B1.BrushType));T2 := GetEnumName(TypeInfo(TGPBrushType), Ord(B2.BrushType));T3 := GetEnumName(TypeInfo(TGPBrushType), Ord(B3.BrushType));T4 := GetEnumName(TypeInfo(TGPBrushType), Ord(B4.BrushType));T5 := GetEnumName(TypeInfo(TGPBrushType), Ord(B5.BrushType));ShowMessage(T1); //BrushTypeSolidColorShowMessage(T2); //BrushTypeHatchFillShowMessage(T3); //BrushTypeTextureFillShowMessage(T4); //BrushTypePathGradientShowMessage(T5); //BrushTypeLinearGradient
end;

有必要先总览一下各画刷的基本效果, 下面是测试程序:


unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;Button3: TButton;Button4: TButton;Button5: TButton;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);procedure Button3Click(Sender: TObject);procedure Button4Click(Sender: TObject);procedure Button5Click(Sender: TObject);procedure FormCreate(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}uses GdiPlus, GdiPlusHelpers;var Rect: TGPRect = (X: 30; Y: 10; Width: 150; Height: 200);procedure TForm1.Button1Click(Sender: TObject);
varBrush: IGPSolidBrush;
beginBrush := TGPSolidBrush.Create($FFFF0000);Canvas.ToGPGraphics.FillEllipse(Brush, Rect);
end;procedure TForm1.Button2Click(Sender: TObject);
varBrush: IGPHatchBrush;
beginBrush := TGPHatchBrush.Create(HatchStyleDiagonalCross, $FF0000FF, $FFCCCCCC);Canvas.ToGPGraphics.FillEllipse(Brush, Rect);
end;procedure TForm1.Button3Click(Sender: TObject);
varBrush: IGPTextureBrush;
beginBrush := TGPTextureBrush.Create(TGPImage.Create('C:\GdiPlusImg\Texture.jpg'));Canvas.ToGPGraphics.FillEllipse(Brush, Rect);
end;procedure TForm1.Button4Click(Sender: TObject);
varBrush: IGPLinearGradientBrush;
beginBrush := TGPLinearGradientBrush.Create(Rect, $FFFF0000, $FF0000FF, 90);Canvas.ToGPGraphics.FillEllipse(Brush, Rect);
end;procedure TForm1.Button5Click(Sender: TObject);
varBrush: IGPPathGradientBrush;Path: IGPGraphicsPath;
beginPath := TGPGraphicsPath.Create;Path.AddEllipse(Rect);Brush := TGPPathGradientBrush.Create(Path);Brush.CenterColor := $FFFF0000;Brush.SetSurroundColors([$FFFFFF00]);Canvas.ToGPGraphics.FillEllipse(Brush, Rect);
end;procedure TForm1.FormCreate(Sender: TObject);
beginButton1.Caption := '实心画刷';Button2.Caption := '阴影画刷';Button3.Caption := '纹理画刷';Button4.Caption := '线性渐变画刷';Button5.Caption := '路径渐变画刷';
end;end.

测试效果图:


转载于:https://my.oschina.net/hermer/blog/319389

GdiPlus[6]: 五种画刷总览相关推荐

  1. Sliverlight之 画刷

    1,5种画刷 (见Project15) (1)TextBlock控件中的Forground和BackGround属性是一个什么对象?它在前台的完整的写法是什么? (实际是.net做了一个转换,可以直接 ...

  2. 入门知识(二)WPF所有的画刷工具

    转自https://www.cnblogs.com/huangxincheng/archive/2012/07/14/2591941.html 这一篇我们聊聊wpf中的画刷,在wpf中如果想玩各种花哨 ...

  3. GDI+学习笔记(六)渐变画刷

    画刷,顾名思义,就是像画刷一样,向设备上绘制,还记得小时候常唱的首歌,"我是一个粉刷匠.." 好吧,跑题了. 本系列博客希望尽可能简单的描述每项功能,而不希望把每个参数都介绍的详详 ...

  4. Direct2D (11) : 画刷之 ID2D1LinearGradientBrush

    TDirect2DCanvas.Brush 的类型是 TDirect2DBrush,它和 GDI 的 TBrush 的区别主要有两点: 1.只保留了 TBrush.Style 中的 bsSolid.b ...

  5. GDI+学习记录(10)- 影线画刷HatchBrush

    影线画刷(HatchBrush)的基本使用: private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Gr ...

  6. WPF基础笔记(5)画刷

    WPF有5种画刷和1种自定义画刷,都是继承自基类Brush.基类如下 透明度    绝对转换     相对转换 以下主要讨论TileBrush 1. Image画刷 <Grid.Backgrou ...

  7. WPF图形之纯色画刷和渐变画刷的使用

    背景介绍   在WPF中,画刷的使用无处不在,可以说画刷是整个WPF体系里不可或缺的一部分,在画刷中,从渲染效果的特征来看,可以分为纯色画刷.线性渐变画刷.径向渐变画刷.每一种画刷都有其适用的场景,下 ...

  8. C# 自定义画刷研究

    windows系统中的画板工具,有好几种画刷,C#中并没有直接对应可使用的类,只能自己研究. 1.画刷原理 根据本人对PS的相关功能细心分析,发现各种画刷其实就是一幅图片的移位重叠显示.通常这幅画刷图 ...

  9. python画圆填色_python turtle我想用五种颜色画五个圆,并且用画圆周的颜色填充,老是出问题,怎么回事,怎么修改?:python教程同心圆...

    python turtle画4个同心圆方法 from turtle import * def test(): reset() circle(30,-360) up() goto(0,-10) down ...

最新文章

  1. Sourse Insight使用教程及常见的问题解决办法
  2. Linux下uniq筛选
  3. Windows下更改mysql data目录
  4. VC遍历窗体控件的实现
  5. 为什么国内SaaS很难爆发
  6. mysql运维管理-mysqldump 备份与恢复数据库20
  7. MYSQL存储引擎笔记
  8. 影子卫士和影子系统哪个好用_影子系统是什么?会损害电脑硬盘吗?
  9. 关于服务器发生w32tm的ID:29,ID:47等错误
  10. python中print后面加逗号
  11. MyEclipse设置文件默认打开方式
  12. mysql触发器编程_mysql之触发器trigger详解
  13. MSP430如何给板子下载程序?(IAR MSPFET CCS)
  14. 手把手教你使用stata做竞争风险模型
  15. 在Chrome、Firefox等高版本浏览器中实现在线编辑、审阅Office文档新方案
  16. 计算机设置开机密码时间屏保,电脑屏幕保护密码设置方法
  17. 亲密关系(二、月晕现象)
  18. Three.js(十二)——骨骼动画、变形动画
  19. 自动驾驶数据集下载!检测/分割/车道线/交标/车牌/行人识别等
  20. Oracle 错误总结及解决方法

热门文章

  1. 浅析 VO、DTO、DO、PO 的概念、区别和用处!
  2. 一行代码,得到最强时序基线!
  3. 数据读取与数据扩增方法
  4. 覆盖近2亿篇论文还免费!沈向洋旗下团队「读论文神器」登B站热搜
  5. 英伟达GPU“屠榜”,谷歌TPU“退赛”,MLPerf最新推理榜单出炉
  6. 分分钟甩Word几条街,Python编辑公式竟可以如此简单
  7. 2021届图像/计算机视觉算法提前批的面经 | 附内推码
  8. 综述 | Google-斯坦福发布深度学习统计力学
  9. kazoo源码分析:服务器交互的实现细节
  10. python 时间time()及日期date()函数