tiff格式的图片可以由多张图片合成, 也可以拆分为多张图片。不管是合成或者拆分,都借助了第三方开源库Cximage,对于这个图像库的使用,我们没有必要去一行一行的去看它的代码实现,我们只需要使用它提供出来的接口就可以了。下面先展示tiff图片的拆分,之后的博客再展示tiff格式图片的合成。
程序运行结果,点击Tiff分割按钮,将“D:\\src.tiff” 图片拆分为0.tiff, 1.tiff, 2.tiff三张图片。
图像拆分主要使用到Cximage类中的GetNumFrames,SetFrame成员函数,分别用来获取图像帧的个数,设置一帧。
long GetNumFrames(); //返回一张图片共有多少帧
void SetFrame(long nFrame); //设置一张图片的当前帧
//tiff图片拆分响应函数
void CTiffDlg::OnBtnTiffSplit()
{
// TODO: Add your control notification handler code here //tiff图片路径
CString strImagePath = "D:\\src.tiff"; //保存的路径
CString strSavePath = "D:"; //执行tiff拆分功能
DoSplitTiff(strImagePath, strSavePath);
}
tiff拆分过程:
/**************************************************************************
/* 函数名: DoSplitTiff
/*
/* 功能:
/* 执行OCR识别功能
/*
/* 参数:
/* strImagePath tiff图片绝对路径
/* strSavePath tiff图片拆分后保存的绝对路径
/*
/* 返回值:
/* 无
***************************************************************************/
void CTiffDlg::DoSplitTiff(CString & strImagePath, CString & strSavePath)
{
CxImage image;
int nFrameCnt = ; //加载图片,给image结构赋值
image.Load(strImagePath, CXIMAGE_FORMAT_TIF); //计算一张tiff图片是由多少张图片合成的
nFrameCnt = image.GetNumFrames(); //每次循环都加载1张tiff图片,并保存到m_pImageData中
for(int nIndex = ; nIndex < nFrameCnt; nIndex++)
{
image.SetFrame(nIndex);
image.Load(strImagePath, CXIMAGE_FORMAT_TIF); m_pImageData->Copy(image); //每张图片保存的路径
if(strSavePath.Right()== "\\")
{
strSavePath.Format("%d%s", nIndex, ".tiff");
}
else
{
strSavePath.Format("\\%d%s", nIndex, ".tiff");
} //保存
m_pImageData->Save(strSavePath, CXIMAGE_FORMAT_TIF);
}
}