第2章 图形图像处理实例 实例38 JPG与BMP相互转换
JPG文件由于具有较高的压缩率和较好的图像质量,特别适合于在Internet上传输,所以得到了广泛的应用。本实例可以实现JPG文件和BMP文件之间的相互转换。 向窗体上添加一个TOpenPictureDialog组件、一个TSavePictureDialog组件、一个Image控件和两个Button控件。设计完成的主界面如图2-36所示。
图2-36 主界面 程序首先在uses段中加入jpeg单元。然后定义了两个全局对象(TBitmap类型的BitFile、TJPEGImage类型的JpgFile)和一个全局变量(AnsiString类型的ImageFile)。其中BitFile和JpgFile对象分别用于存储BMP文件和JPG文件的内容,而ImageFile变量用于存储程序打开的图像文件路径和文件名。 将BMP文件转换为JPG文件是由一个自定义过程BmpToJpg来完成的,它有两个参数:一个是源文件名,一个是目标文件名。响应代码如下: procedure TForm1.BmpToJpg(SrcFileName,DestFileName:AnsiString); begin JpgFile:=TJPEGImage.Create(); BitFile:=TBitmap.Create(); try BitFile.LoadFromFile(SrcFileName); JpgFile.Width:=BitFile.Width; JpgFile.Height:=BitFile.Height; JpgFile.Assign(BitFile); JpgFile.SaveToFile(DestFileName); finally BitFile.Free; JpgFile.Free; end; end; 如果用户打开了一个BMP文件,那么就可以通过单击“转换”按钮来转存为JPG文件,指定了源文件名和目标文件名后,就会调用BmpToJpg过程。 程序首先会创建JpgFile和BitFile对象,并且把SrcFileName参数所表示的BMP文件读取到BitFile对象中。然后设置JpgFile对象的高度和宽度,同时通过JpgFile对象的Assign方法把BitFile中的内容读取到JpgFile中。最后通过调用JpgFile对象的SaveToFile方法转存文件。 将JPG文件转换为BMP文件是由一个自定义过程JpgToBmp来完成的,它的原理和BmpToJpg过程基本一致,请读者参看源程序自己添加。 程序代码如下: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtDlgs, StdCtrls, ExtCtrls, jpeg; type TForm1 = class(TForm) Image1: TImage; btnOpen: TButton; btnSave: TButton; OpenPictureDialog1: TOpenPictureDialog; SavePictureDialog1: TSavePictureDialog; procedure BmpToJpg(SrcFileName,DestFileName:AnsiString); procedure JpgToBmp(SrcFileName,DestFileName:AnsiString); procedure btnOpenClick(Sender: TObject); procedure btnSaveClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; ImageFile:AnsiString; BitFile:TBitmap; JpgFile:TJPEGImage;
implementation {$R *.dfm}
procedure TForm1.BmpToJpg(SrcFileName,DestFileName:AnsiString); begin //把Bmp格式的文件转换成为jpg格式 JpgFile:=TJPEGImage.Create(); BitFile:=TBitmap.Create(); try BitFile.LoadFromFile(SrcFileName); JpgFile.Width:=BitFile.Width; JpgFile.Height:=BitFile.Height; JpgFile.Assign(BitFile); JpgFile.SaveToFile(DestFileName); finally BitFile.Free; JpgFile.Free; end; end;
procedure TForm1.JpgToBmp(SrcFileName,DestFileName:AnsiString); begin //把jpg格式的文件转换成为Bmp格式 JpgFile:=TJPEGImage.Create(); BitFile:=TBitmap.Create(); try JpgFile.LoadFromFile(SrcFileName); BitFile.Width:=JpgFile.Width; BitFile.Height:=JpgFile.Height; BitFile.Assign(JpgFile); BitFile.SaveToFile(DestFileName); finally BitFile.Free; JpgFile.Free; end; end; procedure TForm1.btnOpenClick(Sender: TObject); begin if self.OpenPictureDialog1.Execute then begin ImageFile:=self.OpenPictureDialog1.FileName; Image1.Picture.LoadFromFile(ImageFile); end; end;
procedure TForm1.btnSaveClick(Sender: TObject); begin if self.SavePictureDialog1.Execute then begin if LowerCase(ExtractFileExt(ImageFile))='bmp' then begin BmpToJpg(ImageFile,self.SavePictureDialog1.FileName); end else if LowerCase(ExtractFileExt(ImageFile))='jpg' then begin JpgToBmp(ImageFile,self.SavePictureDialog1.FileName); end; end; end; end.
保存文件,然后按F9键运行程序。在程序运行过程中,单击“打开”按钮,程序就会激活一个提示用户选择BMP或JPG文件的对话框。确认选择后,程序就会显示这个图像文件,如图2-37所示。
图2-37 显示图像文件 单击“转换”按钮,程序就会自动根据源文件选择将要转换的类型,如果读者选择的是BMP文件,程序就会自动将它转换为JPG文件,反之如果读者选择的是JPG文件,程序就会自动将它转换为BMP文件。 读者根据本实例介绍的原理,可以很轻松地完成诸如WMF文件与BMP文件的转换等很多图像转换功能。 |