[ statquos @ 25.06.2008. 10:30 ] @
kako napraviti da program prečita datoteku i prikaze sliku naprimkjer: c:\slika\slika.jpg to sliku prikaze u dialogu |
[ statquos @ 25.06.2008. 10:30 ] @
[ deerbeer @ 25.06.2008. 11:26 ] @
Ucitavas sliku sa LoadImage - za JPG slike moras imati posebnu biblioteku jer ova funkcija cita samo BMP-ove ...
Code: HBITMAP hBitMap = (HBITMAP)::LoadImage(0, "c:\\mojaslika.bmp",IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); Sledeci korak je da napravis CBitmap objekat od ucitane bitmape(hBitMap) .. Code: if (hBitMap) { CBitmap bmp; bmp.Attach(hBitMap); Invalidate() ; } Invalidate() metoda sluzi da bi naterao svoj prozor da se iscrta ponovo cim ucitas bitmapu tj. poziva se OnPaint metoda gde ces obaviti crtanje uz pomoc GDI funkcija ... U OnPaint metodi : Code: // kostrukcija device contexta pomocu kojeg crtas po prozoru . CPaintDC dc (this) ; //uzmi strukturu u kojoj se nalaze informacije od bitmape (sirina,visina ..itd..) BITMAP bmpInfo; bmp.GetBitmap(&bmpInfo); UINT nWidth = bmpInfo.bmWidth ; UINT nHeight = bmpInfo.bmHeight ; //pravis memorijsku kopiju device -contexta (CDC) u koju ces da smestis tvoju bitmapu CDC memDC ; memDC.CreateCompatibleDC(&dc) ; //ucitas bitmapu u kopiju CDC-a memDC.SelectObject(&bmp) ; //Najzad iskopiras bitmapu na tvoj prozor .... dc.BitBlt(0,0,nWidth ,nHeight,&memDC,0,0,SRCCOPY) ; memDC.DeleteDC() ; } [ statquos @ 25.06.2008. 17:03 ] @
kako bi napravio da bi program prečitao mapu dje su slike in prikazuje sve slike u dialogu...
npr: mapa: C:\slike u mapi imam više slika: slika1.bmp, slika2.bmp, slika3.bmp [Ovu poruku je menjao statquos dana 25.06.2008. u 20:00 GMT+1] [ deerbeer @ 26.06.2008. 09:10 ] @
Ako sam te dobro razumeo dodaj na dijalog dugme Browse ili tako nesto
koje ce otvarati File Open Dialog gde ces moci da izaberes vise slika koje zelis da prikazujes : Za tu priliku dodaj CStringList promenljivu u tvoj Dialog class koja ce cuvati putanje slika iz odabranog foldera Na Browse button click : Code: static wchar_t szFilter[] = _T("Bitmap (.bmp) |*.bmp|); static wchar_t szNameBuffer[10000]; szNameBuffer[0]= 0 ; DWORD dwOpenFlags = OFN_PATHMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_HIDEREADONLY | OFN_EXPLORER ; CFileDialog dlg(TRUE,NULL,NULL,dwOpenFlags ,szFilter,this) ; dlg.m_ofn.lpstrTitle = _T("Select image(s)") ; dlg.m_ofn.lpstrFile = szNameBuffer ; dlg.m_ofn.nMaxFile = 10000 ; INT_PTR nResult = dlg.DoModal() ; if ( nResult == IDOK) { POSITION ps = dlg.GetStartPosition() ; while (ps != NULL) { CStringList m_pFileList ; // dodaj ovo kao promeljivu tvoje Dialog klase ... CString strFilePath = dlg.GetNextPathName(ps); m_pFileList.AddTail(strFilePath) ; //dodajes izabrane putanje u listu } } Kad pokupis putanje slika koje izaberes i smestis ih u listu onda ti ostaje da ih prikazujes redom : Mozes dodati jos neke dugmice za navigaciju (Napred >> ) i (<< Nazad) da bi mogao da listash tj. prikazujes slike redom : Code: //prva slika u listi .. CString strImageFile = m_pFileList.FindIndex(0); HBITMAP hBitMap = (HBITMAP)::LoadImage(0, strImageFile,IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); // pa onda ide kod iz prethodnog posta ... [ statquos @ 26.06.2008. 19:02 ] @
to bi mi trebao da bi automatski čitao cijeli direktorij... bez gumba
npr: da imam slike u mapi C:\slike i bi mi prikazivao sve slike koje so u mapi "slike" [ deerbeer @ 26.06.2008. 22:00 ] @
Code: void GetDirFiles (CString& strDirectory) { HANDLE hFile = NULL; WIN32_FIND_DATA fd ; CStringList m_pFileList; CString strFile = _T("*.bmp") ; hFile = FindFirstFile(strDirectory + strFile,&fd) ; CString strFullName ; do { LPCTSTR lpszFile = fd.cFileName ; if (!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { CString strFileName = fd.cFileName ; strFullName = strDirectory + strFileName ; m_pFileList.AddTail(strFullName) ; //dodajes u tvoju listu fajlova .. } } while (FindNextFile(hFile,&fd)) ; FindClose(hFile) ; } Ova funkcija ti popunjava listu fajlova za sve bitmape u datom direktorijumu [ Eurora3D Team @ 29.06.2008. 12:04 ] @
@deerbeer lep tutorijal
Cestitam kolega :) .... svaka cast [ deerbeer @ 29.06.2008. 14:14 ] @
Funkcija GetDirFiles se moze i dopuniti sa dijalogom "Browse for folder"
Code: CString BrowseForFolder (HWND hWndParent ) { //putanja izabranog direktorijuma TCHAR path[MAX_PATH]; CString strDir ; //struktura browseinfo u kojoj se definisu opcije za diajlog ... BROWSEINFO bi = { 0 }; bi.pszDisplayName = path; // parent prozor ili forma koja otvara BrowseForFolder dijalog bi.hwndOwner = hWndParent // glavne opcije -flagovi za filtriranje foldera u dijalogu bi.ulFlags = BIF_RETURNONLYFSDIRS ; // moguce opcije su jos BIF_BROWSEFORCOMPUTER ,BIF_BROWSEFORPRINTER, BIF_BROWSEINCLUDEFILES, BIF_EDITBOX itd ... bi.lpszTitle = _T("Browse for folder") ; LPITEMIDLIST pidl = SHBrowseForFolder (&bi); if (pidl) { if (SHGetPathFromIDList (pidl,path ) ) strDir = path ; //clean up .... IMalloc * imalloc = 0; if ( SUCCEEDED( SHGetMalloc ( &imalloc )) ) { imalloc->Free (pidl); imalloc->Release (); } } return strDir ; } //ako se koristi MFC-ova CWnd ili CDialog klasa za prozor.. HWND hWndOwner = this->GetSafeHwnd() ; CString strDir = BrowseForFolder (hWndOwner) ; if (!strDir.IsEmpty()) GetDirFiles(strDir) ; [ Eurora3D Team @ 30.06.2008. 01:02 ] @
U fajlu sa linka je MFC program sa ovim kodom koji je napisao @deerbeer ... i ja sam dodao ponesto (iscrtavanje svih slika i skrolovanje)
http://eurora3d.com/es/PictureDialog.zip Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|