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]