ZeroMemory(&browse,sizeof(browse));//fills a block of memory with zeros. browse.hwndOwner = NULL;
browse.pszDisplayName = m_strPath.GetBuffer(MAX_PATH); browse.lpszTitle = \请选择一个图像目录\
LPITEMIDLIST lpItem = SHBrowseForFolder(&browse); if(lpItem == NULL) return ; m_strPath.ReleaseBuffer();
if(SHGetPathFromIDList(lpItem,m_strPath.GetBuffer(MAX_PATH)) == false)
return;
m_strPath.ReleaseBuffer();
AfxMessageBox(\您选择的目录为:\
B_OK);
//得到图像目录下文件的路径 CString tempath; CString temps; tempath=m_strPath;
tempath.TrimRight();tempath.TrimLeft(); //去除前后多余 CString strfilepath=tempath; counts=0;
StartDir(strfilepath);
temps.Format(\该目录下共有%d幅图像!\
AfxMessageBox(temps,MB_ICONINFORMATION|MB_OK);
//for (int i = 0; i // AfxMessageBox(temp[i],MB_ICONINFORMATION|MB_OK); } //} //对所有目录查找,取得图像目录下文件路径 void CImageRetrievalDlg::StartDir(const CString& strfile1) { BOOL yesno; CFileFind find; char tempFileFind[200]; sprintf(tempFileFind,\RunDir(strfile1); yesno = (BOOL)find.FindFile(tempFileFind); //查找下级目录 while(yesno) { yesno = find.FindNextFile(); if (find.IsDots() != TRUE) { char foundFileName[200]; strcpy(foundFileName,find.GetFileName().GetBuffer(200)); if((find.IsDirectory() == TRUE)) { char tempDir[200]; sprintf(tempDir,\ // 递归调用 } } StartDir(tempDir); } } find.Close(); return; //对*.bmp文件查找 void CImageRetrievalDlg::RunDir(const CString& strfile2) { BOOL yesno; CFileFind find; char tempFileFind[200]; sprintf(tempFileFind,\ yesno = find.FindFile(tempFileFind); while(yesno) { yesno = find.FindNextFile(); char foundFileName[200]; strcpy(foundFileName,find.GetFileName().GetBuffer(200)); if(!find.IsDots()) { char tempFileName[200]; sprintf(tempFileName,\ CString strfilepath1; } } } strfilepath1.Format(\ counts++; temp[tempi] = new CString(strfilepath1); tempi++; find.Close(); return; //单个图像特征向量 void CImageRetrievalDlg::OnSingleImageIndb() { } //显示关键图的直方图 void CImageRetrievalDlg::OnShowIm() { CString imagefilepath = strfile; CFileOpen fileOpenDlg1(TRUE); if (fileOpenDlg1.DoModal () != IDOK) return; //取得文件路径 POSITION pos = fileOpenDlg1.GetStartPosition(); strfile = fileOpenDlg1.GetNextPathName(pos); AfxMessageBox(strfile); //if (imagefilepath = ' ') {AfxMessageBox(\请选择一幅关键图\ CalculateColor(imagefilepath); HistogramShow(IDC_DLG_HIST_SHOW); } //计算颜色直方图 void CImageRetrievalDlg::CalculateColor(CString pathfile) { CBitmap hbmp; HBITMAP hbitmap; int R,G,B,H,S,V; int i,j; hbitmap=(HBITMAP)::LoadImage (::AfxGetInstanceHandle(),pathfile, IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION); hbmp.Attach(hbitmap); BITMAP bm; hbmp.GetBitmap(&bm); CDC dcMem; dcMem.CreateCompatibleDC(GetDC()); dcMem.SelectObject(hbmp); int width=bm.bmWidth/4; int height=bm.bmHeight/4; COLORREF clr; //定义一个COLORREF结构,因为提取的象素点的颜色是 以RGB形式表示的 int x,y; for(int fda=0;fda<4;fda++)