在 MFC 對話框中實現:選擇圖片文件夾 → 自動遍歷該文件夾下所有圖片(jpg/bmp/png) → 在 Picture 控件中顯示 → 提供下一張按鈕切換。
IDC_BUTTON_NextImage。GetNextBigImg():
readdir 讀取目錄項(需 dirent.h)。strstr 判斷擴展名(.jpg/.bmp/.png)。cvLoadImage 讀取,CvvImage::CopyOf + DrawToHDC 繪製到 Picture 控件的 DC 上。OnInitDialog 中獲取控件 DC (GetSafeHdc()) 與客戶區矩形 (GetClientRect),存入成員變量 m_pPicCtlHdc、m_PicCtlRect。GetNextBigImg()。// 遍歷並顯示下一張圖片
void CGenderRecognitionMFCDlg::GetNextBigImg() {
if (m_pDir && (m_pEnt = readdir(m_pDir)) != NULL) {
char* jpg = strstr(m_pEnt->d_name, ".jpg");
char* bmp = strstr(m_pEnt->d_name, ".bmp");
char* png = strstr(m_pEnt->d_name, ".png");
if (!jpg && !bmp && !png) { // 非圖片,遞歸跳過
GetNextBigImg();
return;
}
// 圖片:載入並繪製
char fullPath[500];
sprintf_s(fullPath, "%s%s", m_ImageDir, m_pEnt->d_name);
IplImage* img = cvLoadImage(fullPath);
CvvImage cvImg;
cvImg.CopyOf(img);
cvImg.DrawToHDC(m_pPicCtlHdc, m_PicCtlRect);
cvReleaseImage(&img);
}
}
若文件夾包含大量非圖片文件,遞歸深度可能導致棧溢出。生產代碼應改用 while 循環輪詢。