Delphi的绘图类:画布类(TCanvas)的使用方法实例
Windows 中的应用程序界面是以像素为显示单位的。因此Win32 专门提供Windows 图形设备接口(Graphics Device Interface,简称GDI)来实现应用程序界面的处理。也就是说,在Windows 中编写图像应用程序,主要是通过调用GDI 函数计算机屏幕上画图实现。在Delphi 中,将这些GDI 函数全部封装在TCanvas 封装,大大降低了图像编程的难度。
本章将首先向读者介绍如何利用TCanvas 等类来实现一些常用的图像功能,然后以画图程序为例,向读者详细介绍这些类的应用方法。另外,在本章最后,向读者详细介绍了Delphi 高级图像编程技术。
Delphi的绘图类
在Delphi 7 中,可以通过以下几种方法:
• 在设计时插入预先做好的图像;
• 在设计时用图像组件控制它们;
• 在程序运行阶段动态地生成图形。
在编程过程中,用的最多的主要有TCanvas,在使用TCanvas 对象的过程中,还经常使用TPen、TBrush 和TColor 几个类。
画布类(TCanvas)
TCanvas 对象是可以看作一个用于绘图的画布,在这个区域内,程序可实现各种绘图功能,很多组件(如TImage、TMemo、TPaintBox 等)的Canvas 属性就是TCanvas 对象。Canvas 属性是对Windows GDI 的一个综合的、面向对象的封装。当使用TCanvas 编程时,TCanvas 类中的成员调用Windows GDI 函数。下面通过一个简单的例子来说明如何利用窗体对象的Canvas 属性来绘图。
启动Delphi 7,新建一个应用程序。为窗体Form1 的OnPaint 事件添加如下代码:
procedure TForm1.FormPaint(Sender: TObject);
begin
Form1.Canvas.TextOut(10,10,’画布对象--Canvas’);
Form1.Canvas.Rectangle(60,60,200,140);
end;
在上面的程序中,应用了Canvas 的TextOut 和Rectangle 方法,分别是输出一行文字和画一个矩形,输出文本的字体、矩形的线条和填充色都是采用的默认值,通过改变Canvas 的属性可以使输出的结果更加美观。
1.TCanvas 的典型应用
procedure TForm1.FormPaint(Sender: TObject);
var
A,x1,y1,x2,y2:Double;
D:Integer;
I:Integer;
E,M_PI:Double;
begin
D := 100;
M_PI := 3.1415926535897932;
for I := 0 to 720 do
begin
A := I * M_PI / 360;
E := D * (1 + sin(12 * A));
x1 := 320 + E * cos(A);
x2 := 320 + E * cos(A + M_PI / 6);
y1 := 240 + E * sin(A);
y2 := 240 + E * sin(A + M_PI / 6);
Canvas.MoveTo(Round(x1),Round(y1));
Canvas.LineTo(Round(x2),Round(y2));
end;
end;
上面的代码只是利用了Delphi 的Canvas 绘图的基本观念和几个简单的基本函数就做出界面美观的电脑绘图。
2.常用属性
(1)ClipRect 属性
TCanvas 的ClipRect 属性可以确定一个裁剪区域的边界。使用ClipRect 可以限制画布上的绘图区域,任何超过该区域的图形将被裁剪,不会出现在画布上。
(2)CopyMode 属性
确定一幅影像拷贝到画布上时相互作用的结果,当使用TCanvas 的CopyRect 方法,把一幅来自其他画布上的影像拷贝到画布上时,将使用其属性。
(3)Font 属性
在画布上输出文本时将使用其字体属性,它是一个TFont 对象,可以设置它的字型、字号和颜色等。
(4)PenPos 属性
该属性可以确定画笔所在的位置,使用PenPos 属性与使用MoveTo 方法具有同样的效果。
(5)Pixels 属性
该属性可以确定像素的颜色,一般说来,如果要设置某一位置的颜色,可以使用这一属性。