delphi实现bmp与jpg图像相互转换及位图大小调整 摘 要:本文介绍了如何通过delphi编码实现bmp格式图像与jpeg格式图像的相互转换以 及bmp格式图像的大小的调整。在图片处理操作中使用了几个api函数,其算法同样适用于其他编程语言。 关键词:图形转换、图片调整 在很多MIS系统或者其他管理信息系统中,有需要用户上传照片到数据库等对图片的操作,根据系统需求不同,可能需要对这些照片进行格式转换或者大小的调整。这里有三个在MIS系统或者其他管理信息系统中比较常用的图片处理过程,与大家分享。 1、 Bmp格式转换位jpg(jpeg)格式。 进程:Image_BitmapToJPeg实现bmp格式图片到Jpg(jpeg)格式图片的转换,如下: {参数介绍: FileName:要转换的位图的路径及名称 SaveFileName:转换后生成 jpg图形的路径及名称} Procedure Image_BitmapToJPeg(Const FileName: String;SaveFileName:String=''); Var Bitmap: TBitmap; //定义变量 JPeg: TJPegImage; //所属unit是:Jpeg,需要在项目的uses 中 加入Jpeg Begin Try Bitmap := TBitmap.Create; //创建位图资源 Bitmap.LoadFromFile(FileName); //根据传入的参数载入位图资源 JPeg := TJPegImage.Create; //创建jpeg资源 JPeg.Assign(Bitmap); //把bitmap中的图像资源拷贝到jpeg对象中 IF Trim(SaveFileName)='' Then //如果传入的目的地址为空,按原名保存(扩展名改变) JPeg.SaveToFile(ChangeFileExt(FileName, '.jpg')) Else //按参数指定的名称保存jpg图片 JPeg.SaveToFile(SaveFileName); Finally FreeAndNil(Bitmap); //释放资源 FreeAndNil(JPeg); //释放资源 End; End; 从上面的代码及其注释中我们可以看出程序思路,首先分别定义并创建bmp对象Bitmap和jpeg对象JPeg,然后在Bitmap对象载入位图后,把Bitmap中的图像 资源复制到Jpeg中,最后把Jpeg保存到磁盘并释放创建的对象。 2、 Jpg(jpeg)格式转换为bmp格式。 进程:Image_JPegToBitmap实现Jpg(jpeg)格式图片到bmp格式图片的转换,如下:
名人堂:众名人带你感受他们的驱动人生马云任志强李嘉诚柳传志史玉柱
{参数介绍: FileName:要转换的 jpg图形的路径及名称 SaveFileName:转换后生成位图的路径及名称} Procedure Image_JPegToBitmap(Const FileName: String;SaveFileName:String=''); Var Bitmap: TBitmap; //定义变量 JPeg: TJPegImage; //所属unit是:Jpeg,需要在项目的uses 中加入 Jpeg Begin Try JPeg := TJPegImage.Create; //创建jpeg资源 JPeg.LoadFromFile(FileName); //根据传入的参数载入jpeg资源 Bitmap := TBitmap.Create; //创建位图资源 Bitmap.Assign(JPeg); //把jpeg中的图像资源拷贝到bitmap对象中 IF Trim(SaveFileName)='' Then //如果传入的目的地址为空,按原名保存(扩展名改变) Bitmap.SaveToFile(ChangeFileExt(FileName, '.bmp')) Else //按参数指定的名称保存bmp图片 Bitmap.SaveToFile(SaveFileName); Finally FreeAndNil(Bitmap); //释放资源 FreeAndNil(JPeg); //释放资源 End; End; 根据上面的代码及其注释我们可以看出,其程序思路与Image_BitmapToJPeg过 程的思路是一致的。 3、 Bmp位图大小调整。 进程:Image_FitBitmap实现对位图大小的调整。如下: {参数介绍: Source:要转换的 位图的路径及名称 Dest: 转换后生成位图的路径及名称 x, y: 转换后位图图片的宽和高} procedure Image_FitBitmap(const Source,Dest:string;const x,y:integer); var abmp,bbmp:tbitmap; //定义变量 abmp为源对象变量 bbmp为目的对象变量 begin abmp:=tbitmap.Create; //创建位图资源 bbmp:=tbitmap.Create; //创建位图资源 try abmp.LoadFromFile(Source); //载入源位图资源 bbmp.Width:=x; //设置目的位图的宽 bbmp.Height:=y; //设置目的位图的高 bbmp.PixelFormat:=pfDevice; //设置位图格式为当前设备默认格式 SetStretchBltMode(bbmp.Canvas.Handle,COLORONCOLOR);//设置指位图拉伸模式
stretchblt(bbmp.Canvas.Handle,0,0,bbmp.Width,bbmp.Height,abmp.Canvas.Handle,0,0,abmp.Width,abmp.Height,srccopy); //从源矩形中复制一个位图到目标矩形并适当压缩bbmp.SaveToFile(Dest); //保存转换后的目的图片 finally abmp.Free; //释放资源 bbmp.Free; //释放资源 end; end; 结合上面的代码及其注释我们知道其思路,首先创建两个位图资源分别对应源位图(abmp)和目的位图(bbmp),源位图载入后,设置目的位图的宽和高,然后通过api函数SetStretchBltMode来设置位图的拉伸模式,通过api函数stretchblt设置目的位图图像资源,最后保存目的位图到磁盘并释放创建的对象。 上面三个过程的源代码加入delphi程序中即可使用,其中TJPegImage 类型属于Jpeg单元,也就是你使用该类的时候,需要在所在单元的uses中加入Jpeg。
|