文档章节

GdiPlus[12]: IGPLinearGradientBrush 的其他构建方式

涂孟超
 涂孟超
发布于 2014/09/26 15:33
字数 331
阅读 6
收藏 0

第二种构建方式: TGPLinearGradientBrush.Create(矩形, 颜色1, 颜色2, 渐变模式);

第三种构建方式: TGPLinearGradientBrush.Create(矩形, 颜色1, 颜色2, 角度);

第三种构建方式中的 "角度"(X 轴, 顺时针)相当于是对渐变模式的自定义, 下面两段测试代码的结果是一样的.

另外, 第三种构建方式还有一个默认为 False 的 Boolean 参数, 说明指定角度是否受其他变换的影响.

测试效果图:



测试一:

uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
const
  C1 = $FFFF0000;
  C2 = $FF0000FF;
var
  Graphics: IGPGraphics;
  Rect, RectBrush: TGPRect;
  Brush: IGPLinearGradientBrush;
begin
  Graphics := TGPGraphics.Create(Canvas.Handle);
  Rect.Initialize(10, 10, 200, 150);
  RectBrush.Initialize(Rect.X + Rect.Width div 8,
                       Rect.Y + Rect.Height div 8,
                       Rect.Width div 4,
                       Rect.Height div 4);

  //LinearGradientModeHorizontal 是默认值
  Brush := TGPLinearGradientBrush.Create(RectBrush, C1, C2, LinearGradientModeHorizontal);
  Graphics.FillRectangle(Brush, Rect);

  Graphics.TranslateTransform(0, Rect.Height + Rect.Y);
  Brush := TGPLinearGradientBrush.Create(RectBrush, C1, C2, LinearGradientModeVertical);
  Graphics.FillRectangle(Brush, Rect);

  Graphics.TranslateTransform(Rect.Width + Rect.X, -Graphics.Transform.OffsetY);
  Brush := TGPLinearGradientBrush.Create(RectBrush, C1, C2, LinearGradientModeForwardDiagonal);
  Graphics.FillRectangle(Brush, Rect);

  Graphics.TranslateTransform(0, Rect.Height + Rect.Y);
  Brush := TGPLinearGradientBrush.Create(RectBrush, C1, C2, LinearGradientModeBackwardDiagonal);
  Graphics.FillRectangle(Brush, Rect);
end;

 
 
 
 
 

 

 

  

测试二:

uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
const
  C1 = $FFFF0000;
  C2 = $FF0000FF;
var
  Graphics: IGPGraphics;
  Rect, RectBrush: TGPRect;
  Brush: IGPLinearGradientBrush;
begin
  Graphics := TGPGraphics.Create(Canvas.Handle);
  Rect.Initialize(10, 10, 200, 150);
  RectBrush.Initialize(Rect.X + Rect.Width div 8,
                       Rect.Y + Rect.Height div 8,
                       Rect.Width div 4,
                       Rect.Height div 4);

  Brush := TGPLinearGradientBrush.Create(RectBrush, C1, C2, 0);
  Graphics.FillRectangle(Brush, Rect);

  Graphics.TranslateTransform(0, Rect.Height + Rect.Y);
  Brush := TGPLinearGradientBrush.Create(RectBrush, C1, C2, 90);
  Graphics.FillRectangle(Brush, Rect);

  Graphics.TranslateTransform(Rect.Width + Rect.X, -Graphics.Transform.OffsetY);
  Brush := TGPLinearGradientBrush.Create(RectBrush, C1, C2, 45);
  Graphics.FillRectangle(Brush, Rect);

  Graphics.TranslateTransform(0, Rect.Height + Rect.Y);
  Brush := TGPLinearGradientBrush.Create(RectBrush, C1, C2, 135);
  Graphics.FillRectangle(Brush, Rect);
end;

 
 
 
 
 

 

 

  

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

涂孟超
粉丝 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
81
0
Wine 3.9 发布,Windows 应用的兼容层

Wine 3.9 发布了,此次更新包含如下内容: OpenGL core contexts enabled by default in Direct 3D. Beginnings of Direct 3D 12 implementation using vkd3d. More support for the Task S......

h4cd
2018/05/26
1K
4
用C++实现半透明按钮控件(PNG,GDI+)

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

shzwork
09/17
4
0
vs 2005 添加GDI配置

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

种地瓜
2015/12/08
135
0
Wine 1.5.0 发布-兼容windows程序

Wine 1.5 是一个开发版本,和之前的wine 1.4 的区别就在于1.4是一个稳定版本,所以如果你不想做实验,就不要安装wine 1.5的开发版本了。 在此版本中有什么新的功能: 新版本的Gecko引擎。 部...

红薯
2012/03/17
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

PostgreSQL 11.3 locking

rudi
今天
5
0
Mybatis Plus sql注入器

一、继承AbstractMethod /** * @author beth * @data 2019-10-23 20:39 */public class DeleteAllMethod extends AbstractMethod { @Override public MappedStatement injectMap......

一个yuanbeth
今天
12
1
一次写shell脚本的经历记录——特殊字符惹的祸

本文首发于微信公众号“我的小碗汤”,扫码文末二维码即可关注,欢迎一起交流! redis在容器化的过程中,涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值,statefulset管理的pod需要...

码农实战
今天
4
0
为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?

之前在阅读《阿里巴巴Java开发手册》时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符串拼接的效率...

武培轩
今天
9
0
队列-链式(c/c++实现)

队列是在线性表功能稍作修改形成的,在生活中排队是不能插队的吧,先排队先得到对待,慢来得排在最后面,这样来就形成了”先进先出“的队列。作用就是通过伟大的程序员来实现算法解决现实生活...

白客C
今天
81
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部