Wechat: yu389741| Email: gisdqy@163.com

Shop:https://www.giserdqy.com/shop

GDAL输出影像


[cpp] view
plain
 copy

  1. //输出影像  
  2. /** 
  3. * @brief    ReadImageToBuff. 
  4. * 把数据从内存中输出到文件中,默认保存为tif格式。 
  5. * @created: 2012/03/25 
  6. * @author:  Zhengwen.Fu 
  7. * @param    szPath      输出路径 
  8. * @param    img         数据块内存块指针 
  9. * @param    nSamples    数据块内存块代表的影像的列数 
  10. * @param    nLines      数据块内存块代表的影像的行数 
  11. * @param    nBandCount  数据块内存块代表的影像的波段数 
  12. * @param    pszFormat   GDAL文件格式标识串,默认是”GTiff”,表示存储为tiff格式,其它格式还有:HDF,ENVI等,具体可参考GDAL说明文档中的:GDAL Raster Formats专题,在index.html页面的Supported Formats里; 
  13. * @exception     
  14. * @return   true    成功 
  15. * @return   false   失败 
  16. * @note     注意szPath指定的文件后缀名要和pszFormat指定的文件格式要求的后缀名一致; 
  17. * @remarks   
  18. * @history: 1.Created by Zhengwen.Fu on 3 25th,2012.         
  19. */  
  20. //template<typename T>  
  21. bool SaveImageToFile(char *szPath,float* img,int nSamples,int nLines,int nBandCount,const char *pszFormat =“GTiff”)  
  22. {  
  23.     GDALAllRegister();         //利用GDAL读取图片,先要进行注册  
  24.     CPLSetConfigOption(“GDAL_FILENAME_IS_UTF8”,“NO”);   //设置支持中文路径  
  25.   
  26.     //准备保存图片  
  27.     GDALDriver *poDriver=GetGDALDriverManager()->GetDriverByName(pszFormat);  
  28.     if( poDriver == NULL )   
  29.     {  
  30.         return false;  
  31.     }  
  32.     char **papszOptions = NULL;   
  33.     GDALDataset *WriteDataSet = poDriver->Create(szPath, nSamples,nLines,nBandCount,GDT_Float32,papszOptions);  
  34.   
  35.     if(WriteDataSet->RasterIO(GF_Write,0,0,nSamples,nLines,img,nSamples,nLines,GDT_Float32,nBandCount,NULL,0,0,0)==CE_Failure )  
  36.     {  
  37.         return false;  
  38.     }  
  39.     delete WriteDataSet;WriteDataSet=NULL;  
  40.     return true;  
  41. }  

用法示例:

[cpp] view
plain
 copy

  1. float data[10*10*1];  
  2. memset(data,0,100*sizeof(float));  
  3.   
  4. //输出为tiff格式  
  5. SaveImageToFile(“F:\\Work\\数据\\tif.tif”,data,10,10,1,“GTiff”);  
  6.   
  7. //HDF4  
  8. SaveImageToFile(“F:\\Work\\数据\\HDF4.hdf4”,data,10,10,1,“HDF4”);  
  9. //不支持  
  10.   
  11. //HDF5  
  12. SaveImageToFile(“F:\\Work\\数据\\HDF5.hdf5”,data,10,10,1,“HDF5”);  
  13. //不支持  
  14.   
  15. //ENVI标准影像  
  16. SaveImageToFile(“F:\\Work\\ENVI.img”,data,10,10,1,“ENVI”);  
  17. //ENVI .hdr Labelled Raster采用头文件加主文件的方式保存,头文件以.hdr做后缀名,主文件的后缀可以任意,但通常都使用.img,这正是造成与Erdas Imagine混淆的原因。  
  18. //文件名不能用hdr做后缀,因为写img时会写同名的hdr文件,如果用hdr则造成头文件和主文件是同一文件,造成读写异常  
  19.   
  20. SaveImageToFile(“F:\\Work\\数据\\ENVI2.envi”,data,10,10,1,“ENVI”);  
  21. //主文件可以使用除hdr之外的任何后缀做文件后缀名  
  22.   
  23. //Erdas Image文件  
  24. SaveImageToFile(“F:\\Work\\数据\\ErdasImagine.img”,data,10,10,1,“HFA”);  
  25. //输出的文件仅有一个.img文件  
  26.   
  27. SaveImageToFile(“F:\\Work\\数据\\ErdasImagine.eds”,data,10,10,1,“HFA”);  
  28. //可以不使用.img做后缀,但是你必须知道你输出的这个文件时Erdas Image文件,否则可能用Envi等是无法打开的。  

转载自:https://blog.csdn.net/u012463389/article/details/50897296