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