/*********************************** ************************************ 函數名稱:DisplayMultiDIB 參數: CDC* pDC -指向當前裝置上下文(Divice Context)的指標 CString * mfile -要顯示的多個位元影像路徑,我在這裡傳入的是一個儲存路徑的數組功能:將多個位元影像顯示在螢幕上 **********************************************************************/
void DisplayMultiDIB(CDC* pDC, CString * mfile)
{ //建立一個檔案對象 int i=0; ClearAll(pDC);
while(*mfile != NULL)
{ CFile file;
//以唯讀模式開啟檔案
file.Open (*mfile,CFile::modeRead);
//讀取檔案到HDIB控制代碼中. 注意:此時只是讀取位元影像檔案中檔案頭之後的部分,不含檔案頭
m_hDIB[i]=::ReadDIBFile (file);
//HDIB控制代碼: 就是一Block Storage位元影像資料的記憶體地區的地址
//HDIB控制代碼包含:位元影像資訊頭、調色盤(如果有的話)、DIB映像資料
//關閉檔案 file.Close ();
//指向DIB的指標(指向位元影像資訊頭)
BYTE* lpDIB=(BYTE*)::GlobalLock ((HGLOBAL)m_hDIB[i]);
// 擷取DIB寬度和高度
int cxDIB = ::DIBWidth((char*) lpDIB); int cyDIB = ::DIBHeight((char*)lpDIB); CRect rcDIB,rcDest;
//每排顯示10張圖
int row = i/10; int colume = i%10;
//設定勘探區輸出大小尺寸 ,這裡讀入的都是相同大小的位元影像
rcDest.top = row*cyDIB; rcDest.left =colume*cxDIB; rcDest.right = rcDest.left + cxDIB; rcDest.bottom = (row+1)*cyDIB;
//設定輸出映像的地區
rcDIB.top = rcDIB.left = 0; rcDIB.right = cxDIB; rcDIB.bottom = cyDIB;
//在客戶區顯示映像
::PaintDIB(pDC->m_hDC,rcDest,m_hDIB[i],rcDIB,NULL); ::GlobalUnlock((HGLOBAL)m_hDIB[i]); mfile++; i++; }
}
通過檔案對話方塊讀入的多個位元影像的路徑
CFileDialog dlg(TRUE,NULL,NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,szFilter,NULL);
dlg.m_ofn.lpstrFile = strFileBuffer.GetBuffer(2048);
dlg.m_ofn.nMaxFile = 2048; dlg.m_ofn.Flags=OFN_EXPLORER|OFN_ENABLEHOOK|OFN_ALLOWMULTISELECT;
UINT nRespond=dlg.DoModal(); strFileBuffer.ReleaseBuffer();
if(nRespond == IDOK)
{int i=0; POSITION pos =dlg.GetStartPosition();
while(pos)
{ strPathName=dlg.GetNextPathName(pos);
m_file[i++]=strPathName;
}m_file[i]="NULL"; }
else return;
大實話:本人系菜鳥,弄了兩天才解決這個問題,僅供參考。