MFC|gdal 图像金字塔

TIIF格式的影像并不能创建金字塔,创建之后数据都是0(至少我尝试的是这样)。
以下是创建代码:
const char*pszResampling = "nearest"; //采样方式
GDALProgressFunc pfnProgress = GDALDummyProgress; //进度条
int OverviewList[3]={4,8,16};
//第五个参数是需要创建金字塔的波段数目,设置为0表示给所有波段创建金字塔
//第六个参数是波段列表
【MFC|gdal 图像金字塔】if(GDALBuildOverviews( pIODataset,pszResampling, 3, OverviewList,
0, NULL, pfnProgress, NULL ) != CE_None)
{
//创建失败!
}
创建之后要获得指定波段指定层的数据:
pRasterBand = pIODataset->GetRasterBand(1); //第一波段
GDALRasterBand *pRasterBand2;
pRasterBand2 = pRasterBand ->GetOverview(0); //第零层



然后就可以通过pRasterBand->RasterIO获得像素数据了。

函数原型:
CPLErr GDALDataset::BuildOverviews(const char *pszResampling,
intnOverviews,
int *panOverviewList,
intnListBands,
int *panBandList,
GDALProgressFuncpfnProgress,
void *pProgressData
)
用于建立波段略缩图。
如果制定数据集不支持这个操作,方法会返回CE_Failure。CPLGetLastErrorNo()将会返回CPLE_NotSupported值。
这个方法的作用和C函数GDALBuildOverviews()作用是一样的。

参数:
pszResampling"NEAREST", 平均值 或者"MODE"中的一个,用来控制重采样方法
nOverviews一共需要建立多少个略缩图
panOverviewList一个数组,用来表示建立略缩图时缩小的参数列表
nBand在下面的波段号列表中需要建立略缩图的波段数,如果是0则建立所有波段
panBandList要建立略缩图的波段号列表
pfnProgress一个用来记录进程执行进度的回调函数(大概可以用来画进度条),如果不要处理进度,设置null
pProgressData传递到进度处理函数中的应用数据

返回:
成功返回CE_None,如果这个函数不能正常工作,返回CE_Failure .

    推荐阅读