电竞比分网-中国电竞赛事及体育赛事平台

分享

delphi實(shí)現(xiàn)bmp與jpg圖像相互轉(zhuǎn)換及位圖大小調(diào)整

 昵稱15698978 2014-02-07

delphi實(shí)現(xiàn)bmp與jpg圖像相互轉(zhuǎn)換及位圖大小調(diào)整 
 
摘  要:本文介紹了如何通過delphi編碼實(shí)現(xiàn)bmp格式圖像與jpeg格式圖像的相互轉(zhuǎn)換以
及bmp格式圖像的大小的調(diào)整。在圖片處理操作中使用了幾個(gè)api函數(shù),其算法同樣適用于其他編程語(yǔ)言。  
關(guān)鍵詞:圖形轉(zhuǎn)換、圖片調(diào)整  
在很多MIS系統(tǒng)或者其他管理信息系統(tǒng)中,有需要用戶上傳照片到數(shù)據(jù)庫(kù)等對(duì)圖片的操作,根據(jù)系統(tǒng)需求不同,可能需要對(duì)這些照片進(jìn)行格式轉(zhuǎn)換或者大小的調(diào)整。這里有三個(gè)在MIS系統(tǒng)或者其他管理信息系統(tǒng)中比較常用的圖片處理過程,與大家分享。 
 
1、 Bmp格式轉(zhuǎn)換位jpg(jpeg)格式。 
進(jìn)程:Image_BitmapToJPeg實(shí)現(xiàn)bmp格式圖片到Jpg(jpeg)格式圖片的轉(zhuǎn)換,如下:  
{參數(shù)介紹: 
  FileName:要轉(zhuǎn)換的位圖的路徑及名稱 
  SaveFileName:轉(zhuǎn)換后生成 jpg圖形的路徑及名稱}   
Procedure Image_BitmapToJPeg(Const FileName: String;SaveFileName:String=''); Var 
  Bitmap: TBitmap;                 //定義變量 
  JPeg: TJPegImage;                //所屬unit是:Jpeg,需要在項(xiàng)目的uses 中 加入Jpeg Begin   Try 
    Bitmap := TBitmap.Create;      //創(chuàng)建位圖資源 
    Bitmap.LoadFromFile(FileName); //根據(jù)傳入的參數(shù)載入位圖資源     JPeg := TJPegImage.Create;     //創(chuàng)建jpeg資源 
    JPeg.Assign(Bitmap);          //把bitmap中的圖像資源拷貝到j(luò)peg對(duì)象中 
    IF Trim(SaveFileName)='' Then  //如果傳入的目的地址為空,按原名保存(擴(kuò)展名改變)       JPeg.SaveToFile(ChangeFileExt(FileName, '.jpg')) 
    Else                        //按參數(shù)指定的名稱保存jpg圖片       JPeg.SaveToFile(SaveFileName); 
  Finally 
    FreeAndNil(Bitmap);           //釋放資源     FreeAndNil(JPeg);             //釋放資源   End; End; 
從上面的代碼及其注釋中我們可以看出程序思路,首先分別定義并創(chuàng)建bmp對(duì)象Bitmap和jpeg對(duì)象JPeg,然后在Bitmap對(duì)象載入位圖后,把Bitmap中的圖像
資源復(fù)制到Jpeg中,最后把Jpeg保存到磁盤并釋放創(chuàng)建的對(duì)象。 
 
2、 Jpg(jpeg)格式轉(zhuǎn)換為bmp格式。 
進(jìn)程:Image_JPegToBitmap實(shí)現(xiàn)Jpg(jpeg)格式圖片到bmp格式圖片的轉(zhuǎn)換,如下: 
 


名人堂:眾名人帶你感受他們的驅(qū)動(dòng)人生馬云任志強(qiáng)李嘉誠(chéng)柳傳志史玉柱
 


{參數(shù)介紹: 
  FileName:要轉(zhuǎn)換的 jpg圖形的路徑及名稱   SaveFileName:轉(zhuǎn)換后生成位圖的路徑及名稱} 
Procedure Image_JPegToBitmap(Const FileName: String;SaveFileName:String=''); Var 
Bitmap: TBitmap;                  //定義變量 
JPeg: TJPegImage;                 //所屬unit是:Jpeg,需要在項(xiàng)目的uses 中加入 Jpeg Begin 
Try 
   JPeg := TJPegImage.Create;     //創(chuàng)建jpeg資源 
   JPeg.LoadFromFile(FileName);   //根據(jù)傳入的參數(shù)載入jpeg資源    Bitmap := TBitmap.Create;      //創(chuàng)建位圖資源 
   Bitmap.Assign(JPeg);           //把jpeg中的圖像資源拷貝到bitmap對(duì)象中 
   IF Trim(SaveFileName)='' Then  //如果傳入的目的地址為空,按原名保存(擴(kuò)展名改變)       Bitmap.SaveToFile(ChangeFileExt(FileName, '.bmp')) 
    Else                           //按參數(shù)指定的名稱保存bmp圖片       Bitmap.SaveToFile(SaveFileName);  Finally 
   FreeAndNil(Bitmap);            //釋放資源    FreeAndNil(JPeg);              //釋放資源  End; End; 
根據(jù)上面的代碼及其注釋我們可以看出,其程序思路與Image_BitmapToJPeg過
程的思路是一致的。 
 
3、 Bmp位圖大小調(diào)整。 
進(jìn)程:Image_FitBitmap實(shí)現(xiàn)對(duì)位圖大小的調(diào)整。如下: 
 
{參數(shù)介紹: 
  Source:要轉(zhuǎn)換的 位圖的路徑及名稱   Dest:  轉(zhuǎn)換后生成位圖的路徑及名稱   x, y:  轉(zhuǎn)換后位圖圖片的寬和高} 
procedure Image_FitBitmap(const Source,Dest:string;const x,y:integer); var 
 abmp,bbmp:tbitmap;            //定義變量  abmp為源對(duì)象變量  bbmp為目的對(duì)象變量 begin 
abmp:=tbitmap.Create;                     //創(chuàng)建位圖資源 bbmp:=tbitmap.Create;                     //創(chuàng)建位圖資源 try 
  abmp.LoadFromFile(Source);             //載入源位圖資源 bbmp.Width:=x;                         //設(shè)置目的位圖的寬 
bbmp.Height:=y;                        //設(shè)置目的位圖的高 
bbmp.PixelFormat:=pfDevice;            //設(shè)置位圖格式為當(dāng)前設(shè)備默認(rèn)格式 SetStretchBltMode(bbmp.Canvas.Handle,COLORONCOLOR);//設(shè)置指位圖拉伸模式 

 

 


    
    
stretchblt(bbmp.Canvas.Handle,0,0,bbmp.Width,bbmp.Height,abmp.Canvas.Handle,0,0,abmp.Width,abmp.Height,srccopy);   //從源矩形中復(fù)制一個(gè)位圖到目標(biāo)矩形并適當(dāng)壓縮bbmp.SaveToFile(Dest); //保存轉(zhuǎn)換后的目的圖片 finally 
abmp.Free;  //釋放資源 bbmp.Free;  //釋放資源 end; end; 
結(jié)合上面的代碼及其注釋我們知道其思路,首先創(chuàng)建兩個(gè)位圖資源分別對(duì)應(yīng)源位圖(abmp)和目的位圖(bbmp),源位圖載入后,設(shè)置目的位圖的寬和高,然后通過api函數(shù)SetStretchBltMode來(lái)設(shè)置位圖的拉伸模式,通過api函數(shù)stretchblt設(shè)置目的位圖圖像資源,最后保存目的位圖到磁盤并釋放創(chuàng)建的對(duì)象。 
 
上面三個(gè)過程的源代碼加入delphi程序中即可使用,其中TJPegImage 類型屬于Jpeg單元,也就是你使用該類的時(shí)候,需要在所在單元的uses中加入Jpeg。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多