請教各位,我可以以二進制流的方式打開一張jpg圖片顯示到picture 控制元件上,還可以遍歷指定檔案夾X下的10張圖片,得到保存了這些圖片路徑的串列(CStringlist)。現在我想要在按下BUTTON 按鈕之后,回圈顯示這個檔案夾下的10張圖片,當然還是以二進制流的方式顯示。是不是可以通過讀一個串列里面的路徑再顯示一張圖片這樣的方式來回圈顯示這10張圖片呢?或者有什么別的方法來連續顯示圖片嗎? 可以提供思路,當然有代碼參考就更好了。
(1) 以二進制流顯示jpg圖片代碼:
CFile file;
file.Open(_T("G:\\img.jpgt"), CFile::modeRead);
DWORD dwDataLen = file.GetLength(); //獲取檔案的長度
for (int i = 0; i < dwDataLen; i++)
{
BYTE *buf = new BYTE[dwDataLen]; //創建陣列,用來保存影像的資料
memset(buf, 0x00, dwDataLen); //初始化陣列
file.Read(buf, dwDataLen); //影像檔案的資料保存在陣列中
file.Close(); //關閉檔案
CImage image;
COleStreamFile osf;
osf.CreateMemoryStream(NULL);
osf.Write((void*)buf, dwDataLen);
osf.SeekToBegin();
image.Load(osf.GetStream());
CRect rect; //定義矩形類
CWnd *pWnd = GetDlgItem(IDC_PICTURE); //獲得pictrue控制元件視窗的指標
pWnd->GetClientRect(&rect); //獲得pictrue控制元件所在的矩形區域
CDC *pDC = pWnd->GetDC(); //獲得pictrue控制元件的DC
pDC->SetStretchBltMode(COLORONCOLOR); //進行影像縮放處理避免影像顯示時失真
image.Draw(pDC->m_hDC, rect); //將圖片畫到Picture控制元件表示的矩形區域
ReleaseDC(pDC); //釋放picture控制元件的DC
(2) 遍歷圖片中的檔案
void SRAECH(CString strPathName)
{
if (strPathName.IsEmpty())
{
AfxMessageBox(_T("請選擇圖片所在的檔案夾!"));
}
strPathName += "//*.*";
CFileFind finder;
CStringList filelist;//檔案串列
long filenum = 0;//長度
BOOL bResult = finder.FindFile(strPathName);
if (!bResult)
{
AfxMessageBox(_T("未找到影像檔案!"));
return ;
}
while (bResult)
{
bResult = finder.FindNextFile();
//判斷是否是目錄或者是隱藏檔案,又或者是".."和".",如果是,進入下一輪回圈
if (finder.IsDirectory() || finder.IsDots() || finder.IsHidden())
continue;
else//如果是檔案
{
CString str;
//得到檔案名
str = finder.GetFileName();
//得到檔案后綴名
int nLen = str.GetLength() - finder.GetFileTitle().GetLength();
str = str.Right(nLen);
//判斷檔案格式,如果是影像檔案,將其完整的路徑保存在串列中
//if (str == ".jpg" || str == ".png" || str == ".bmp" || str == ".gif")
if (str == ".jpg") //只找JPG圖片
filelist.AddTail(finder.GetFilePath());
}
}
finder.Close();
filenum = filelist.GetCount();
}
uj5u.com熱心網友回復:
用一個Timer等定時器,周期性的到目錄下讀取,然后用一個變數標識當前讀取的是第幾個檔案,然后回圈讀取下一個檔案,再顯示到控制元件uj5u.com熱心網友回復:
頂,,,,,,,,,,,,,uj5u.com熱心網友回復:
回圈顯示指定路徑下的多張圖片?當然用容器,vector<string>把圖片全路徑都push進去,
召喚定時器settimer
int i=0;當前顯示圖片
邏輯就是取得容器下標i的路徑,顯示,然后i++ i+1>=容器.size() 則i=0 不斷回圈了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/86869.html
標籤:基礎類
下一篇:關于網路傳輸資料并實時畫曲線
