tiff格式的圖片可以由多張圖片合成, 也可以拆分為多張圖片。不管是合成或者拆分,都借助了第三方開源庫Cximage,對於這個圖像庫的使用,我們沒有必要去一行一行的去看它的代碼實現,我們只需要使用它提供出來的接口就可以了。下面先展示tiff圖片的拆分,之后的博客再展示tiff格式圖片的合成。
程序運行結果,點擊Tiff分割按鈕,將“D:\\src.tiff” 圖片拆分為0.tiff, 1.tiff, 2.tiff三張圖片。

圖像拆分主要使用到Cximage類中的GetNumFrames,SetFrame成員函數,分別用來獲取圖像幀的個數,設置一幀。
long GetNumFrames(); //返回一張圖片共有多少幀
void SetFrame(long nFrame); //設置一張圖片的當前幀
1 //tiff圖片拆分響應函數 2 void CTiffDlg::OnBtnTiffSplit() 3 { 4 // TODO: Add your control notification handler code here 5 6 //tiff圖片路徑 7 CString strImagePath = "D:\\src.tiff"; 8 9 //保存的路徑 10 CString strSavePath = "D:"; 11 12 //執行tiff拆分功能 13 DoSplitTiff(strImagePath, strSavePath); 14 }
tiff拆分過程:

1 /************************************************************************** 2 /* 函數名: DoSplitTiff 3 /* 4 /* 功能: 5 /* 執行OCR識別功能 6 /* 7 /* 參數: 8 /* strImagePath tiff圖片絕對路徑 9 /* strSavePath tiff圖片拆分后保存的絕對路徑 10 /* 11 /* 返回值: 12 /* 無 13 ***************************************************************************/ 14 void CTiffDlg::DoSplitTiff(CString & strImagePath, CString & strSavePath) 15 { 16 CxImage image; 17 int nFrameCnt = 0; 18 19 //加載圖片,給image結構賦值 20 image.Load(strImagePath, CXIMAGE_FORMAT_TIF); 21 22 //計算一張tiff圖片是由多少張圖片合成的 23 nFrameCnt = image.GetNumFrames(); 24 25 //每次循環都加載1張tiff圖片,並保存到m_pImageData中 26 for(int nIndex = 0; nIndex < nFrameCnt; nIndex++) 27 { 28 image.SetFrame(nIndex); 29 image.Load(strImagePath, CXIMAGE_FORMAT_TIF); 30 31 m_pImageData->Copy(image); 32 33 //每張圖片保存的路徑 34 if(strSavePath.Right(1)== "\\") 35 { 36 strSavePath.Format("%d%s", nIndex, ".tiff"); 37 } 38 else 39 { 40 strSavePath.Format("\\%d%s", nIndex, ".tiff"); 41 } 42 43 //保存 44 m_pImageData->Save(strSavePath, CXIMAGE_FORMAT_TIF); 45 } 46 }
