文档章节

GDI+ 学习记录(11): 路径渐变画刷 - PathGradientBrush

涂孟超
 涂孟超
发布于 2014/09/26 15:36
字数 776
阅读 5
收藏 0
//路径渐变画刷
var
  g: TGPGraphics;
  path: TGPGraphicsPath;
  pb: TGPPathGradientBrush; {声明渐变画刷}
  num: Integer;
const
  colors: array[0..0] of TGPColor = (aclAqua);
begin
  g := TGPGraphics.Create(Canvas.Handle);
  path := TGPGraphicsPath.Create;
  path.AddEllipse(0,0,166,88);

  pb := TGPPathGradientBrush.Create(path);   {建立渐变画刷}
  pb.SetCenterColor(MakeColor(255,0,0,255)); {中心颜色}

  num := 1;
  pb.SetSurroundColors(@colors, num); {周围的颜色}
  {第二个参数, 不能用常数代替; 它好像是第一个数组参数的索引+1}

  g.FillEllipse(pb, 0, 0, 166, 88); {需要和定义的渐变效果的大小一样}
  //g.FillPath(pb,path); {直接画路径效果也一样}

  path.Free;
  pb.Free;
  g.Free;
end;

 
 
 
 
 

 

 

  
//可以通过点数组的指针创建路径画刷 var g : TGPGraphics; pts: array[0..2] of TGPPoint; pb: TGPPathGradientBrush; begin g := TGPGraphics.Create(Canvas.Handle); pts[0] := MakePoint(100, 0); pts[1] := MakePoint(200, 200); pts[2] := MakePoint(0, 200); pb:= TGPPathGradientBrush.Create(PGPPoint(@pts), 3); g.FillRectangle(pb, 0, 0, 200, 200); {没有指定中心颜色和周边颜色, 将分别默认黑色和白色} pb.Free; g.Free; end;
//设置路径画刷的中心点 var g: TGPGraphics; path: TGPGraphicsPath; pb: TGPPathGradientBrush; num: Integer; const colors : array[0..0] of TGPColor = (aclAqua); begin g := TGPGraphics.Create(Canvas.Handle); path:= TGPGraphicsPath.Create; path.AddEllipse(0, 0, 140, 70); pb:= TGPPathGradientBrush.Create(path); pb.SetCenterPoint(MakePoint(120, 40)); {设置中心点} pb.SetCenterColor(MakeColor(255, 0, 0, 255)); num := 1; pb.SetSurroundColors(@colors, num); g.FillEllipse(pb, 0, 0, 140, 70); path.Free; pb.Free; g.Free; end;
//使用灰度校正 var g: TGPGraphics; path: TGPGraphicsPath; pb: TGPPathGradientBrush; num: Integer; const colors: array[0..0] of TGPColor = (aclAqua); begin g := TGPGraphics.Create(Canvas.Handle); path := TGPGraphicsPath.Create; path.AddEllipse(0,0,166,88); pb := TGPPathGradientBrush.Create(path); pb.SetGammaCorrection(True); {使用灰度校正} num := 1; pb.SetSurroundColors(@colors, num); g.FillEllipse(pb, 0, 0, 166, 88); path.Free; pb.Free; g.Free; end;
//多种颜色及位置 var g : TGPGraphics; pts: array[0..2] of TGPPoint; pb: TGPPathGradientBrush; const colors: array[0..2] of TGPColor = (aclGreen, aclAqua, aclBlue); pos: array[0..2] of Single = (0.0, 0.25, 1.0); {颜色位置需要 >0、<1, 是百分百} begin g := TGPGraphics.Create(Canvas.Handle); pts[0] := MakePoint(100, 0); pts[1] := MakePoint(200, 200); pts[2] := MakePoint(0, 200); pb:= TGPPathGradientBrush.Create(PGPPoint(@pts), 3); {根据点数组指针建立路径画刷} pb.SetInterpolationColors(@colors, @pos, 3); {设置颜色位置} g.FillRectangle(pb, 0, 0, 200, 200); pb.Free; g.Free; end;
//设置多种周边颜色 var g: TGPGraphics; path: TGPGraphicsPath; pb: TGPPathGradientBrush; colors: array[0..9] of TGPColor; num: Integer; const pts : array[0..9] of TGPPoint = ((x:75 ; y:0 ), (x:100; y:50 ), (x:150; y:50 ), (x:112; y:75 ), (x:150; y:150), (x:75 ; y:100), (x:0 ; y:150), (x:37 ; y:75 ), (x:0 ; y:50 ), (x:50 ; y:50 )); begin g := TGPGraphics.Create(Canvas.Handle); path:= TGPGraphicsPath.Create; path.AddLines(PGPPoint(@pts), 10); pb:= TGPPathGradientBrush.Create(path); pb.SetCenterColor(MakeColor(255, 255, 0, 0)); colors[0] := MakeColor(255, 0, 0, 0); colors[1] := MakeColor(255, 0, 255, 0); colors[2] := MakeColor(255, 0, 0, 255); colors[3] := MakeColor(255, 255, 255, 255); colors[4] := MakeColor(255, 0, 0, 0); colors[5] := MakeColor(255, 0, 255, 0); colors[6] := MakeColor(255, 0, 0, 255); colors[7] := MakeColor(255, 255, 255, 255); colors[8] := MakeColor(255, 0, 0, 0); colors[9] := MakeColor(255, 0, 255, 0); num := 10; pb.SetSurroundColors(@colors, num); {设置多种周边颜色} g.FillPath(pb, path); pb.SetGammaCorrection(True); {使用灰度校正} g.TranslateTransform(200.0, 0.0); g.FillPath(pb, path); path.Free; pb.Free; g.Free; end;
//描绘在不同的区域 var g : TGPGraphics; pb: TGPPathGradientBrush; p: TGPPen; colors: array[0..4] of TGPColor; num: Integer; const pts: array[0..4] of TGPPointF = ((x: 0.0 ; y: 0.0), (x: 160.0; y: 0.0), (x: 160.0; y: 200.0), (x: 80.0 ; y: 150.0), (x: 0.0 ; y: 200.0)); begin g := TGPGraphics.Create(Canvas.Handle); pb:= TGPPathGradientBrush.Create(PGPPointF(@pts), 5); colors[0] := MakeColor(255, 255, 0, 0); colors[1] := MakeColor(255, 0, 255, 0); colors[2] := MakeColor(255, 0, 255, 0); colors[3] := MakeColor(255, 0, 0, 255); colors[4] := MakeColor(255, 255, 0, 0); num := 5; pb.SetSurroundColors(@colors, num); pb.SetCenterColor(MakeColor(255, 255, 255, 255)); g.FillRectangle(pb, MakeRect(0, 0, 180, 220)); p := TGPPen.Create(aclBlack); g.DrawRectangle(p, MakeRect(0, 0, 180, 220)); p.Free; pb.Free; g.Free; end;

本文转载自:http://www.cnblogs.com/del/archive/2007/12/27/1017210.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
Windows Phone开发(31):画刷

画刷是啥玩意儿?哈,其实画刷是用来涂鸦,真的,没骗你,至于你信不信,反正我信了。 本文通过价绍几个典型的画刷,使你明白画刷就是用来涂鸦的。 一、纯色画刷SolidColorBrush。 这个家伙比...

junwong
2012/04/18
250
0
常用的GDI+ 函数使用例子

一、通过Gdi+加载和显示PNG,JPG等格式的图片 //直接加载外部的图像 Image* image = new Image(L"test.png");//如果需要通过ID 来加载的话 BOOL CSmalltmpdemoDlg::ImageFromIDResource(UIN...

junwong
2012/03/23
239
0
Direct2D教程(八)梯度色画刷

概述 单色画刷产生的颜色是单一的,比如一个红色画刷只能输出红色,而渐变画刷则不同,它可以输出多种颜色,这些颜色通常是连续的,从一个颜色平滑过渡到另一个颜色,看起来有渐变的效果。渐...

吞吞吐吐的
2017/08/08
0
0
【Visual C++】游戏开发笔记之四——游戏画面绘图(一)基本图形绘制

本系列文章由zhmxy555编写,转载请注明出处。 http://blog.csdn.net/zhmxy555/article/details/7333886 作者:毛星云 邮箱: happylifemxy@qq.com 欢迎邮件交流编程心得 从本篇文章开始笔锋一...

长平狐
2012/11/12
115
0
【QT技术应用】2D绘图

2D绘图 Qt4中的2D绘图部分称为Arthur绘图系统.它由3个类支撑整个框架,QPainter,QPainterDevice和QPainterEngine.QPainter用来执行具体的绘图相关操作 如画点,画线,填充,变换,alpha通道等...

长平狐
2012/09/03
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SpringCloud SpringBoot mybatis分布式Web应用的统一异常处理

我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况。Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用...

itcloud
8分钟前
0
0
c++ std::bind和std::function

定义于头文件 <functional> std::bind 函数绑定,https://zh.cppreference.com/w/cpp/utility/functional/bind // bind 用例#include <iostream>#include <functional> // 自定义的一......

SibylY
11分钟前
0
0
SecureCRT的安装与破解(过程很详细!!!)

SecureCRT的安装与破解(过程很详细!!!) SecureCRT的安装与破解(过程很详细!!!) 使用SecureCRT可以方便用户在windows环境下对linux主机进行管理,这里为大家讲一下SecureCRT的破解方...

DemonsI
15分钟前
0
0
介绍几款可用的web应用防火墙

目前有两款,基于软件和基于应用程序的web应用防火墙。基于软件的产品布置在Web服务器上,而基于应用程序的产品放置在Web服务器和互联网接口之间。两种类型的防火墙都会在数据传入和传出web...

上树的熊
22分钟前
1
0
用Visual Studio开发以太坊智能合约

区块链和以太坊 自从我熟悉区块链、以太坊和智能合约以来,一直失眠。 我一直在阅读,阅读和阅读,最后我能够使用一些工具,他们建议使用以太坊网站官方客户端应用程序(Ethereum Wallet)也...

geek12345
24分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部