GDAL读取图像文件,建立金字塔 |
您所在的位置:网站首页 › gdal读取tif文件生金字塔 › GDAL读取图像文件,建立金字塔 |
GDAL是遥感数据的IO处理库,可以读写erdas img、GeoTiff等多种文件格式。本文通过建立金字塔读取大数据量的文件(测试数据1.45GB,文件格式 img)。 #include "gdal_priv.h" #include "math.h" unsigned char *uc_gray; //灰度数组 int iwidth; //图像宽度 int iheight; //图像高度 int CImageObject::GetSmpStep(float size) { //一副图内存中加载最大32MB if (size uc_gray = (BYTE *) CPLMalloc(sizeof(unsigned int)*nXSize*nYSize); int width=nXSize; int savewidth=width%4; if(savewidth!=0) savewidth=4-savewidth; savewidth+=width; iwidth=savewidth; iheight=nYSize; poBand->RasterIO( GF_Read, 0, 0, nXSize, nYSize, uc_gray, iwidth, iheight, GDT_Byte, 0, 0 ); } //图像较大时根据压缩比率建立相应的金字塔 else { int OverviewList[1]={iSmpStep}; poBand->BuildOverviews("NEAREST", 1, OverviewList, GDALDummyProgress, NULL ); int index = 0; iSmpStep = 4; nXSize /= iSmpStep; nYSize /= iSmpStep; uc_gray = (BYTE *) CPLMalloc(sizeof(unsigned int)*nXSize*nYSize); int width=nXSize; int savewidth=width%4; if(savewidth!=0) savewidth=4-savewidth; savewidth+=width; iwidth=savewidth; iheight=nYSize; GDALRasterBand *poBand2; poBand2 = poBand->GetOverview(index); poBand2->RasterIO( GF_Read, 0, 0, nXSize, nYSize, uc_gray, iwidth, iheight, GDT_Byte, 0, 0 ); } //转置图像使(0,0)坐标由左上角转换为左下角 int i; BYTE temp; for(i=0; i temp = uc_gray[i*iwidth+j]; uc_gray[i*iwidth+j] = uc_gray[(iheight-i-1)*iwidth+j]; uc_gray[(iheight-i-1)*iwidth+j] = temp; } } GDALClose(poDataset); return true; } return false; } |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |