Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)aaa
published in(发表于) 2014/7/19 0:12:14
Delphi的绘图类

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 属性

该属性可以确定像素的颜色,一般说来,如果要设置某一位置的颜色,可以使用这一属性。


If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759