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

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

                  

         }

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值