Delphi提供一组图形图像组件和一组图像类用于图形及图像处理。
常用的图形图像组件有Shape、PaintBox和Image组件,相关的图像类有TGraphic、TPicture和TBitmap。
Delphi除了允许在Form上直接绘制图形外,还允许使用PaintBox组件来作图。PaintBox 组件位于System选项卡中。
用PaintBox绘制图形与在Form上绘制图形的方法相似,不同的是在程序设计阶段,可以直接设定PaintBox的大小和位置。
在使用Canvas属性绘制图形时,图形的坐标都是相对于PaintBox组件的,即PaintBox的左上角为(0,0) 的坐标,而不用管PaintBox在Form上的位置,同时当图形的大小超出PaintBox组件区域时,超出部分将自动被切割。
Shape组件用于显示简单的图形,如矩形、椭圆等,位于Additional选项卡中。
Shape组件的Width、Height、Left和Top属性决定图形的大小和位置;
Brush和Pen属性的意义与TCanvas中的完全相同;
Shape属性决定所显示图形的形状,取值为stEllipse(椭圆)、stCircle(圆形)、stRectangle(矩形)、stRoundRect(圆角矩形)、stSquare(正方形)或stRoundSquare(圆角正方形)。
Image组件除了可以绘图外,还可用于显示各种不同格式的图像,位于Additional选项卡上。其主要属性如下:
(1)Picture属性。
Picture属性保存Image组件所要显示的图像文件。使用该属性编辑器中的Load按钮,可装入.bmp、.ico、.jpg、.jpeg、.emf、.wmf等图像文件,不能装入.gif图像文件。
程序运行时,可使用Picture属性的LoadFromFile和SaveToFile方法实现图像文件的装入与保存。例如:
Image1.Picture.LoadFromFile('c:\My Documents\fly.bmp'); //装入文件
Image1.Picture.SaveToFile('d:\temp\fly.bmp'); //保存文件
(2)AutoSize属性。
AutoSize属性确定是否调整Image组件的尺寸与图像的大小一致。当取值为True时,调整Image组件的尺寸与图像的大小一致,以显示完整的图像。默认值为False。
(3)Stretch属性。
Stretch属性确定是否改变图像尺寸以适应Image组件的大小。
当取值为True时,图像尺寸与Image的大小一致。如果改变Image组件的大小,图像大小也会随之变化。默认值为False。该属性对图标(ICO)格式的图像无效。
(4)Center属性。
Center属性控制图像是否居中显示。
当取值为True时,图像在Image组件居中显示。默认值为False。当AutoSize和Stretch的取值均为False时,该属性设置有效。
(5)Transparent属性。
Transparent属性确定Image组件是否透明。
当取值为True时,Image组件透明,表示允许在Image组件下面的其他组件可见,否则不透明。该属性只对bitmap位图文件有效。
Delphi的标准对话框组件OpenPictureDialog和SavePictureDialog是分别用于打开和保存图像文件的两个对话框。
这些对话框提供对图像文件的预览功能,提供图像文件的过滤功能,默认的图像文件格式为*.bmp、*.ico、*.emf、*.wmf、*.jpg等。
用Canvas绘制出来的图形只能是一些简单图形,程序中如果需要用到一些复杂的图像,就必须从图像文件中调用。Delphi的图像类具有处理BMP、ICO、JPG等图像文件的能力。
Delphi能处理的图像文件格式主要有4种:
Bitmap位图文件、Icon图标文件、Metafile图元文件和JPEG图像文件,对应的类分别为TBitmap、TIcon、TMetafile和TJPEGImage,它们都是TGraphic类的子类。
TGraphic类中处理图像文件的属性和方法如下所示。
· Empty只读属性:取值为True时,没有图像数据。
· Width和Height属性:控制图像的宽度和高度。
· LoadFromFile和SaveToFile方法:读取和保存图像文件。
TGraphic类中定义的LoadFromFile和SaveToFile方法是虚方法,读取和保存文件的具体操作由其子类实现。
例如,TBitmap类的LoadFromFile和SaveToFile方法只能读写*.bmp文件,
TIcon类的LoadFromFile和SaveToFile方法只能读写*.ico文件等。这两个方法都只有一个字符串类型的参数,指出文件的路径,路径中包含文件名,且文件名的后缀名必须与子类的类型相对应,否则将导致错误。
TBitmap的主要属性和方法如下所示。
· Canvas属性:返回一个TCanvas类实例,用于在位图上绘制各种图形。
· Create方法:创建一个TBitmap类实例。
· Assign方法:将一个图像数据赋给当前TBitmap类对象。
使用TBitmap、TIcon和TMetafile类只能处理固定格式的图像文件,而TPicture类可以处理多种类型的图像文件。
TPicture类有一个Graphic属性,类型为TGraphic,能容纳TGraphic的所有子类对象。同时,TPicture中也有LoadFromFile和SaveToFile方法,它们与TGraphic中文件处理方法不同的是,根据图像文件的后缀名,自动选择合适的文件类型保存或读取图像文件。
使用TBitmap对象,可读取图像文件,将图像文件显示在窗体上,也可将窗体上的图像文件保存成.bmp文件。例如:
var
bmp1: TBitmap;
bmp1:=TBitmap.Create; //创建TBitmap实例
bmp1.LoadFromFile('C:\WlNDOWS\Clouds.bmp'); //只能读取BMP图像
Form1.Canvas.Draw(0,0,bmp1); //图像显示在窗体上
bmp1.Free; //释放图像对象
在窗体或组件上显示图形可使用Canvas中的Draw和StretchDraw方法,定义如下:
procedure Draw(X,Y: double; Graphic: TGraphic);
procedure StretchDraw(const Rect: TRect; Graphic: TGraphic);
Delphi中使用TPrinter对象可以访问打印机端口。
如果要使用TPrinter对象打印图像,必须在程序的uses语句中添加Printers单元,这样系统就会自动声明一个TPrinter类的对象printer,之后通过printer可引用TPrinter类的属性。
TPrinter的主要属性见表10-5。
表10-5 TPrinter的主要属性
属 性 |
意 义 |
BeginDoc |
开始打印 |
Canvas |
在打印一页之前,Canvas在内存中创建这个页所在的位置 |
EndDoc |
结束打印,在调用EndDoc之前并不进行实际的打印操作 |
NewPage |
打印机换页,并将Canvas的Pen属性值回到起始位置(0,0) |
PageHeight |
返回页的高度 |
PageNumber |
返回正在被打印的页号 |
TextOut |
使文本被发送到Canvas |
TPrinter的主要方法有GetPrinter( )和SetPrinter( ),这两个方法用来获取和设置打印机的一些信息。GetPrinter方法声明如下:
procedure GetPrinter(ADevice,ADriver,APort:PChar;var ADeviceMode: THandle);
其中,参数分别表示设备的名称、驱动文件名、端口号以及指向打印机的DevMode结构的句柄变量。
SetPrinter方法的声明格式与GetPrinter的完全一致,只是功能正好相反。