利用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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章