文档章节

GdiPlus[6]: 五种画刷总览

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

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);
var
  B1,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); //BrushTypeSolidColor
  ShowMessage(T2); //BrushTypeHatchFill
  ShowMessage(T3); //BrushTypeTextureFill
  ShowMessage(T4); //BrushTypePathGradient
  ShowMessage(T5); //BrushTypeLinearGradient
end;

 
 
 
 
 

 

 

  

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

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = 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;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses GdiPlus, GdiPlusHelpers;

var Rect: TGPRect = (X: 30; Y: 10; Width: 150; Height: 200);

procedure TForm1.Button1Click(Sender: TObject);
var
  Brush: IGPSolidBrush;
begin
  Brush := TGPSolidBrush.Create($FFFF0000);
  Canvas.ToGPGraphics.FillEllipse(Brush, Rect);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  Brush: IGPHatchBrush;
begin
  Brush := TGPHatchBrush.Create(HatchStyleDiagonalCross, $FF0000FF, $FFCCCCCC);
  Canvas.ToGPGraphics.FillEllipse(Brush, Rect);
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  Brush: IGPTextureBrush;
begin
  Brush := TGPTextureBrush.Create(TGPImage.Create('C:\GdiPlusImg\Texture.jpg'));
  Canvas.ToGPGraphics.FillEllipse(Brush, Rect);
end;

procedure TForm1.Button4Click(Sender: TObject);
var
  Brush: IGPLinearGradientBrush;
begin
  Brush := TGPLinearGradientBrush.Create(Rect, $FFFF0000, $FF0000FF, 90);
  Canvas.ToGPGraphics.FillEllipse(Brush, Rect);
end;

procedure TForm1.Button5Click(Sender: TObject);
var
  Brush: IGPPathGradientBrush;
  Path: IGPGraphicsPath;
begin
  Path := 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);
begin
  Button1.Caption := '实心画刷';
  Button2.Caption := '阴影画刷';
  Button3.Caption := '纹理画刷';
  Button4.Caption := '线性渐变画刷';
  Button5.Caption := '路径渐变画刷';
end;

end.

 
 
 
 
 

 

 

  

测试效果图:


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

涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
用C++实现半透明按钮控件(PNG,GDI+)

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

shzwork
09/17
4
0
vc++中HBRUSH的几种用法

HBRUSH hbr; 第一种: hbr= CreateSolidBrush(RGB(255,0,0)); //创建单色的画刷 第二种: hbr= (HBRUSH)GetStockObject(BLACKBRUSH); //只能取特定颜色的画刷,如BLACKBRUSH,GRAY_BRUSH刷 第三种......

rainbowcode
07/11
3
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
简述WPF中的画刷(Brush)

-------------------------------------------------------------------------------- 引用或转载时请保留以下信息: 大可山 [MSN:a3news(AT)hotmail.com] http://www.zpxp.com http://www.b......

Andrewniu
2018/09/30
0
0
vs 2005 添加GDI配置

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

种地瓜
2015/12/08
135
0

没有更多内容

加载失败,请刷新页面

加载更多

zk中ToBeAppliedRequestProcessor解析

ToBeAppliedRequestProcessor在Leader中 在已处理事务和最后处理事务处理器之间,处理器链上下一个是FinalRequestProcessor public void processRequest(Request request) throws RequestPro...

writeademo
17分钟前
2
0
Allegro快捷键设置-PCB环境

立题简介: 内容:简单介绍Allegro绘制的PCB环境下的快捷键; 来源:实际使用得出; 作用:对Allegro绘制PCB快捷键进行介绍; PCB环境:Cadence 16.6; 立题详解: 对“allegro”板而言,其在...

demyar
18分钟前
2
0
idea maven web项目启动build时报错java.lang.NullPointerException

之前还好好的,重启一下idea就报这个错了,大概率是tomcat没杀掉端口被占用了,在tomcat配置中更换一下sever端口就好了

宇辰OSC
22分钟前
2
0
weed3-2.3.1.查询之输出

Weed3 一个超轻量级ORM框架(只有0.1Mb哦) 源码:https://github.com/noear/weed3 源码:https://gitee.com/noear/weed3 查询可是个复杂的话题了,可能我们80%的数据库处理都在查询。 今天先...

刘之西东
22分钟前
2
0
【Android JetPack系列】数据绑定:DataBinding

参考MVVM

Agnes2017
30分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部