本人使用Delphi2010开发的系统,通过RaveReport做报表工作时、报表有图片打印要求。
RaveReport仅提供Bitmap component,而Bitmap component支持image要求是.BMP文件,为适应客户要求,本人做了通用的图片文件转换工程,供参考!
1、加载jpeg、pngimange,并定义过程
uses jpeg, pngimage;
procedure imagesavetobmp(sour_filename,tag_filename:string);
// sour_filename:源文件名称
// tag_filename:目标文件(.bmp)名称
2、过程源代码
procedure From1.imagesavetobmp(sour_filename,tag_filename:string);
var
jpg:TJPEGimage;
png:Tpngimage;
bmp:Tbitmap;
ext:string;
begin
// 获取文件类型:BMP、JPG、PNG
ext := copy(sour_filename, pos('.', sour_filename), length(sour_filename));
// 图片转换1:bmp格式
if (ext='.bmp') or (ext ='.BMP') then
begin
bmp:=Tbitmap.Create;
bmp.LoadFromFile(sour_filename);
bmp.SaveToFile(tag_filename);
end;
// 图片转换2:jpg格式
if (ext='.JPG') or (ext='.jpg') or (ext='.jpeg') or (ext='.JPEG') then
begin
jpg:=TJPEGimage.Create;
bmp:=Tbitmap.Create;
try
jpg.LoadFromFile(sour_filename);
bmp.Assign(jpg);
bmp.SaveToFile(tag_filename);
finally
jpg.Free ;
bmp.Free;
end;
end;
// 图片转换3:png格式
if (ext='.PNG') or (ext='.png') then
begin
png:=Tpngimage.Create;
bmp:=Tbitmap.Create;
try
png.LoadFromFile(sour_filename);
bmp.Assign(png);
bmp.SaveToFile(tag_filename);
finally
png.Free ;
bmp.Free;
end;
end;
end; // 过程结束
说明:本人在代码开始时讲求模块化模式,所以在本文源码中,本人尽量避免if...else...形式。因此,这段程序中通过三段 if 程序实现3种图片的转换。当然,源bmp文件可以直接通过winexec等方式直接转到目标文件,但为便于系统后期维护等考虑,本人将bmp文件也通过‘’bmp‘进行了中介转换。