GDAL 存储超大tiff图像问题,请大侠帮忙看一下

峨眉山小猴 2014-09-03 05:18:33
最近在要拼接几张图像,每张影像都有两百兆左右,我创建了一个大的tiff文件用来保存拼接好的图像,但是每次程序运行到一半的时候就挂掉了


我的部分代码如下:

创建大的tiff图像:

const char *pszFormat = "GTiff";
GDALDriver *pGdalDriver = GetGDALDriverManager()->GetDriverByName(pszFormat);
if(pGdalDriver == NULL) return 0;
char **ppMetaData = pGdalDriver->GetMetadata();
ppMetaData = CSLSetNameValue(ppMetaData, "COMPRESS", "LZW");
ppMetaData = CSLSetNameValue(ppMetaData, "ZLEVEL", "9");
ppMetaData = CSLSetNameValue(ppMetaData, "BIGTIFF", "YES");
GDALDataset *pDataSet = pGdalDriver->Create(fileName.c_str(), nWidth, nHeight, nChannels, GDT_Byte, ppMetaData);

将小图像一张一张的写入大图像:

byte* pBuf = NULL;
pBuf = new byte[m_nTileHeight * m_nTileWidth * m_nChannels]; // 一张待拼接的小图像的缓存数据

if (!pBuf)
{
return;
}

for (int row = m_nRowMinIndex , i = 0; i < m_nRowCount; row++, i ++) // 纵向有多少张小图像
{
[size=16px] for(int col = m_nColMinIndex, j = 0; j < m_nColCount; col++, j++) // 横向有多少张小图像
{
std::string strFileName;
bool result = getFileName(col, row, strFileName);
if ( !result || strFileName == "") continue;
int nW, nH;
int ret = ReadImg((char*)strFileName.c_str(), pBuf, nW, nH); 读取一张小图像
if (ret != 0) continue;

int offsetx = m_nTileWidth * j;
int offsety = m_nTileHeight * i;

pDataset->RasterIO(GF_Write, offsetx, offsety, nW, nH, pBuf,
nW, nH, GDT_Byte, nChannels, 0, nChannels, 0, 1);

cout<<".";
}
}
[/size]
...全文
628 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-09-03
  • 打赏
  • 举报
回复 1
CreateFileMapping

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧