GDAL读取图像文件,建立金字塔
来源:互联网 发布:nginx测试配置文件 编辑:程序博客网 时间:2024/05/16 19:52
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 <= 32)
return 1;
else
return (int(sqrt(size/32)));
}
bool CImageObject::ReadGdalFile(CString strfile)
{
GDALDataset *poDataset;
GDALAllRegister();
poDataset = (GDALDataset *) GDALOpen(strfile , GA_ReadOnly);
if( !poDataset == NULL )
{
//Fetching a Raster Band
GDALRasterBand *poBand;
poBand = poDataset->GetRasterBand( 1 );
//Reading Raster Data
long nXSize = poBand->GetXSize();
long nYSize = poBand->GetYSize();
//计算图像大小
float fsize;
fsize = (nXSize / 1024) * (nYSize / 1024) * 8 ;
//获得金字塔压缩比率
iSmpStep = GetSmpStep(fsize);
//图像较小时直接读取灰度值
if(iSmpStep == 1)
{
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<int(iheight/2); i++)
{
for(int j=0; j<iwidth; j++)
{
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;
}
- GDAL读取图像文件,建立金字塔
- GDAL读取图像文件,建立金字塔
- GDAL读取图像文件,建立金字塔
- 使用GDAL建立影像金字塔
- 使用gdal对图像建立金字塔
- GDAL金字塔
- GDAL-读取影像的金字塔,生成快视图
- gdal使用经验(一)影像读取-生成金字塔
- GDAL保存图像文件
- gdal 工具创建金字塔
- GDAL构建金字塔
- gdal 图像金字塔
- VS2013C++通过GDAL打开遥感图像文件
- java读取bmp图像文件
- java读取bmp图像文件
- 图像文件的读取
- 图像文件批量读取
- 使用GDAL创建Erdas格式的金字塔
- 一个GDAL的读写数据例子
- Base class for cloning an object in C#
- ERP 在 AIX 的32位操作系统和64位操作系统之间互相迁移
- WIN CE 长按键
- 全面分析Java的垃圾回收机制
- GDAL读取图像文件,建立金字塔
- jBPM开发入门指南(4)
- oracle中的exists 和not exists 用法详解
- 游戏框架
- 很简单的方法找到字符串中不允许的汉字
- struts數據庫訪問
- CDN知识科普
- eXtremeTable eXtremeComponents参考文档
- 数据库连接查询类型(左连接、右连接、全连接、内连接和交叉连接)