利用GDAL读取图片,将数据以BIP的方式存在内存中。

用GDAL的读取函数:

GDALDataset::RasterIO ( GDALRWFlag  eRWFlag,
    int  nXOff,
    int  nYOff,
    int  nXSize,
    int  nYSize,
    void *  pData,
    int  nBufXSize,
    int  nBufYSize,
    GDALDataType  eBufType,
    int  nBandCount,
    int *  panBandMap,
    int  nPixelSpace,
    int  nLineSpace,
    int  nBandSpace  
  )  
读取数据,如果最后3个参数都设置为0的话,存在内存中的数据是以BSQ的方式排列的,有时为了提高程序效率要将数据存成BIP的方式,要实现此功能需要对函数的最后3个参数进行设置:

测试代码如下:

int main()
{
	char* inputFileName="C:\\TestData.img";
	GDALAllRegister();                                                             //利用GDAL读取图片,先要进行注册
	CPLSetConfigOption("GDAL_FILENAME_IS_UTF8","NO");   //设置支持中文
	//准备读取图片
	GDALDataset *ReadDataSet=(GDALDataset*)GDALOpen(inputFileName,GA_ReadOnly);
	int width=ReadDataSet->GetRasterXSize();
	int height=ReadDataSet->GetRasterYSize();
	int bandsCount=ReadDataSet->GetRasterCount();
	//分配数据内存
	float* data=new float[width*height*bandsCount];
	ReadDataSet->RasterIO(GF_Read,0,0,width,height,data,width,height,GDT_Float32,bandsCount,NULL,
		sizeof(float)*bandsCount,sizeof(float)*bandsCount*width,sizeof(float));  //得到的data数据就是按BIP方式排列的
	return 0;
}


你可能感兴趣的:(利用GDAL读取图片,将数据以BIP的方式存在内存中。)