GDAL读取图像文件,建立金字塔
来源:互联网 发布:网络红人直播软件 编辑:程序博客网 时间:2024/05/17 03:45
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格式的金字塔
- 服务器配置实例(一).HP Prolient ML570 服务器
- SWT教程-1
- 第25~28課
- SWT教程-2
- 驱动开发入门
- GDAL读取图像文件,建立金字塔
- 百度之星2005年初赛题目
- 信息安全等级保护重在内网安全体系建设!
- Eclipse快捷键
- 找到一本C程序设计教程
- 纯CSS的下拉菜单 支持IE6
- 悬停效果 静止不动 不随滚动条滚动 纯css实现
- 【学习指南】高考考生要远离三个复习误区
- 给上传图片加个图片水印,文字水印的功能