第一个问题:Delphi中的TImage控件直接支持Bitmap格式(.bmp)、 Icon格式(.ico)和Metafile格式(.emf or .wmf)的图像文件。在Delphi的设计窗口中可以把这三种格式的文件赋给TImage控件的Picture属性。TImage控件还能显示其他格式的图像,如JPEG格式的图像。但不能直接把文件名赋值给Picture属性,而需要把图像对象赋值给属性Picture的Graphic属性。Delphi 3.0 提供了TJPEGImage类来支持JPEG图像,调用TJPEGImage的方法LoadFromFile可以从文件中装载JPEG图像。因此显示JPEG格式的图像,实现起来相对容易一些。以下是一个测试程序的制作过程: 1.建立一个新的应用程序,窗体(Form)的名字为Form1,对应的单元名为Unit1。 2.在窗体中放置一个TImage控件,名字为Image1,将其AutoSize属性设为True。 3.在窗体中放入一个按钮(即TButton控件),取名为Button1,把其属性Caption改为“装载图像”,在Button1的OnClick事件中,加入代码后如下: procedure TForm1.Button1Click(Sender: TObject); var JPEGImage:TJPEGImage; begin JPEGImage:=TJPEGImage.Create; //创建JPEG图像对象 try JPEGImage.LoadFromFile(′F:\forest.jpg′); //从文件F:\forest.jpg中装载图像, //视实际情况改变此处的文件名 Image1.Picture.Graphic:=JPEGImage; //赋值,使Image1显示JPEG图像 finally JPEGImage.Free; //释放对象 end; end; 4. 类TJPEGImage定义在单元jpeg.pas中,因此必须在本单元(即单元Unit1)的uses 子句中包括单元jpeg。 5.运行本程序,进行测试。
一、图像数据的保存 1.创建一个含有Graphic字段的数据库列表。 在WindowsISQ(或Databasedesktop)下createdatab
asemydb.gdb createtablemyfrieds (namevarchar(15)notnull,telephonevarchar(
12),addressvarchar(30),zipvarchar(8),pictu
revarchar(15),imageblob); 其中,picture字段用于保存图像的名称(包括路径
),image(Graphic字符)则用于存储图像,其数据类型
为“blob”。 2.建立窗体(如图1所示),设置窗体中各控件的属
性。
该窗体的主要功能是将某人信息进行编辑和保存。需
要注意的图像保存所用的图像框必须用TImage而不能用TD
BImage,编辑框宜用Tedit而不宜用TDBEdit,这一点与
图像的读取恰好相反。 其中,各主要控件的属性设置如下: Datasource1.Dataset:Κtable1; Table1.Databasename:Κmydb.gdb; Table1.Tablename:Κmyfriends; Table1.active:Κtrue; 其他诸如Caption之类的属性设置不再叙述。 3.数据处理程序的建立。 (1)图像( .bmp文件)打开的处理。 procedureTForm1.pictopenbtnClick(Sender:TOb
ject); beginopendialog1.execute; image1.picture.loadfromfile (opendialog1.filename); end; (2)图像保存的处理。 图像保存的处理程序完成把在窗体1所编辑的信息包
括图像保存到相应的数据库中,其关键是要定义一个Graph
ic类型的变量且该变量要用assing()函数传递到相应数
据库中保存。具体程序如下: procedureTform1.Savebtnclick(sender:TObject
); vargraphic1:TGraphic; begingraphic1:ΚTGraphic.Create; graphic1.loadfromfile(opendialog1.filename
); table1.insert; table1.fieldbyname(′name′).asstring:Κe
dit1.text; table1.fieldbyname(′telephon′).asstring
:Κedit2.text; table1.fieldbyname(′address′).asfloat:
Κ(edit3.text); table1.fieldbyname(′zip′).asfloat:Κ(e
dit4.text); table1.fields[4].assign(graphic1); table1.post; graphic1.free; end;