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 .
推荐阅读
- opencv|图像处理之椒盐噪声的添加与去除
- OpenCV|【OpenCV 完整例程】89. 带阻滤波器的传递函数
- OpenCV|【OpenCV 完整例程】90. 频率域陷波滤波器
- OpenCV|【OpenCV 完整例程】22. 图像添加非中文文字
- OpenCV|【OpenCV 完整例程】91. 高斯噪声、瑞利噪声、爱尔兰噪声
- 灰度世界算法(Gray World Algorithm)和White Patch Retinex算法
- MFC中CString、char*、int、COleDateTime之间的转换
- 安卓开发|通过RenderScript 实现 NV21转Bitmap、两张Bitmap按照透明度混合的工具类
- 动态添加菜单\删除菜单\插入菜单
- MFC_string与CString之间互相转换