gdal 图像金字塔

     TIIF格式的影像并不能创建金字塔,创建之后数据都是0(至少我尝试的是这样)。

以下是创建代码:

    const char      *pszResampling = "nearest"; //采样方式  
    GDALProgressFunc pfnProgress = GDALDummyProgress;//进度条  
    int OverviewList[3]={4,8,16};

     //第五个参数是需要创建金字塔的波段数目,设置为0表示给所有波段创建金字塔

     //第六个参数是波段列表

    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,
        int      nOverviews,
        int *      panOverviewList,
        int      nListBands,
        int *      panBandList,
        GDALProgressFunc      pfnProgress,
        void *      pProgressData
    )  
用于建立波段略缩图。
如果制定数据集不支持这个操作,方法会返回CE_Failure。CPLGetLastErrorNo()将会返回CPLE_NotSupported值。
这个方法的作用和C函数GDALBuildOverviews()作用是一样的。

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

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

你可能感兴趣的:(MFC,图像处理,gdal)