您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页delphi实现bmp与jpg图像相互转换及位图大小调整

delphi实现bmp与jpg图像相互转换及位图大小调整

来源:化拓教育网


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。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务