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 }