DemHeader.iDemX = set.m_nXPoint; // 填充文件头 DemHeader.iDemY = set.m_nYPoint; DemHeader.interval = set.m_nInterval; // 选择待生成的DEM文件 CFileDialog fileDlg(FALSE, "*.dem", "*.dem", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "地形数据文件(*.dem)|*.dem||", NULL); if (fileDlg.DoModal() == IDOK) { // 申请DEM数据缓冲区 int* pData = new int[set.m_nWidthBytes * set.m_nYPoint + 100]; if (set.m_bUseRandom == FALSE) { BYTE R, G, B; // 24位图象将真彩数据转换为灰度数据保存 for (int i = 0; i < set.m_nYPoint; i++) { for (int j = 0; j < set.m_nXPoint; j++) { B = set.m_pData[i * set.m_nWidthBytes + j * 3]; G = set.m_pData[i * set.m_nWidthBytes + j * 3 + 1]; R = set.m_pData[i * set.m_nWidthBytes + j * 3 + 2]; pData[i * DemHeader.iDemX + j] = (int)((9798.0f * R + 19235.0f * G + 3735.0f * B) / 32768.0f); } } }else{ for (int i = 0; i < set.m_nXPoint * set.m_nYPoint; i++) // 用随机数填充DEM数据 pData[i] = (int)(rand() % set.m_nLimit); } CFile file; // 保存DEM数据到文件 file.Open(fileDlg.GetPathName(), CFile::modeCreate | CFile::modeReadWrite); if (pData != NULL) { file.Write((LPSTR)&DemHeader, sizeof(DemHeader)); file.WriteHuge((LPSTR)pData, DemHeader.iDemX * DemHeader.iDemY * sizeof(int)); } file.Close(); delete[] pData; } |