VS2013C++通过GDAL打开遥感图像文件

xiaoxiao2021-02-28  82

VS2013C++通过GDAL打开遥感图像文件

       在VS2013环境中,通过VC++CFileDialog打开文件时,获取的文件名称类型为CString类型,而Gdal打开函数需要的文件名参数为char*类型,在这个过程中存在文件名类型的转换。这个问题并不是很好解决,所以共享出来。

      以下代码给出了文件->打开菜单响应中打开遥感图像的实现。

         CString filter=_T("tif(*.tif)|*.tif|"); 

         CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,filter); 

         if(dlg.DoModal()!=IDOK

         {      MessageBox(_T("没有选择文件"));          return;

        

         CString  strPath; 

         fileName=dlg.GetFileName();//获取文件的路径

         strPath=dlg.GetPathName();//获取文件的路径及名称     

         MessageBox(fileName);

 

         CFile file; 

         CFileException fe; 

         if(!file.Open(strPath,CFile::modeRead| CFile::shareDenyWrite,&fe)) 

         {         //ReportSaveLoadException(lpszPathName,&fe,FALSE,AFX_IDP_FAILED_TO_CREATE_DOC);

                   MessageBox(_T("打开文件失败"));

                   return

          

         //2017-06-08,CString类型文件名转换为char*类型

         TCHAR* strFilePath = strPath.GetBuffer(); //将文件的路径及名称从CString类型转换为TCHAR类型

         strPath.ReleaseBuffer();  

         intiLen = 2 * wcslen(strPath);//CString,TCHAR汉字算一个字符,因此不用普通计算长度

         char*strFilePath2 = newchar[iLen+ 1];

         //获取字节长度 

         iLen= WideCharToMultiByte(CP_ACP, 0,strFilePath, -1, NULL, 0, NULL,NULL);

         //tchar值赋给_char  

         WideCharToMultiByte(CP_ACP, 0,strFilePath, -1,strFilePath2, iLen, NULL, NULL);

 

         GDALDataset * DataSet;         // 在这里数据集即为理解为图像文件 

         GDALAllRegister();              //注册驱动,这项万不可少,必要步骤。

//文件的打开使用的是DALOpen函数 

         DataSet= (GDALDataset *)GDALOpen(strFilePath2, GA_ReadOnly);

                  if(DataSet == NULL

        

                    MessageBox(_T("无法打开遥感图像")); 

                    return

         }

          

        m_bands =DataSet->GetRasterCount(); 

       pBand = newGDALRasterBand* [m_bands]; //新建波段 

       if(pBand == NULL) { 

        //AfxMessageBox("创建数据集波段失败"); 

        return

     

    for(inti =0;i<m_bands;i++) 

   

       pBand[i] = DataSet->GetRasterBand(i+1);//预读取遥感的第一个波段,因该是这个作用吧!         

        if(pBand[i] == NULL

       

            MessageBox(_T("创建i波段数据集失败!"));             return

                  

         }

转载请注明原文地址: https://www.6miu.com/read-81242.html

最新回复(0)