Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

mfc C++ - čitanje slike

[es] :: C/C++ programiranje :: mfc C++ - čitanje slike

[ Pregleda: 2070 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

statquos

Član broj: 182898
Poruke: 11
*.static.siol.net.



Profil

icon mfc C++ - čitanje slike25.06.2008. u 10:30 - pre 192 meseci
kako napraviti da program prečita datoteku i prikaze sliku

naprimkjer: c:\slika\slika.jpg

to sliku prikaze u dialogu
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-1.sezampro.yu.



+395 Profil

icon Re: mfc C++ - čitanje slike25.06.2008. u 11:26 - pre 192 meseci
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() ; 
   
}


Viva lollapalooza
 
Odgovor na temu

statquos

Član broj: 182898
Poruke: 11
*.static.siol.net.



Profil

icon Re: mfc C++ - čitanje slike25.06.2008. u 17:03 - pre 192 meseci
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]
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-a-1.sezampro.yu.



+395 Profil

icon Re: mfc C++ - čitanje slike26.06.2008. u 09:10 - pre 192 meseci
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 ... 


Viva lollapalooza
 
Odgovor na temu

statquos

Član broj: 182898
Poruke: 11
*.static.siol.net.



Profil

icon Re: mfc C++ - čitanje slike26.06.2008. u 19:02 - pre 192 meseci
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"
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-a-1.sezampro.yu.



+395 Profil

icon Re: mfc C++ - čitanje slike26.06.2008. u 22:00 - pre 192 meseci
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

Viva lollapalooza
 
Odgovor na temu

Eurora3D Team
Nebojsa - Programer & Vodja tima
Beograd

Član broj: 120376
Poruke: 900
91.148.113.*



+7 Profil

icon Re: mfc C++ - čitanje slike29.06.2008. u 12:04 - pre 192 meseci
@deerbeer lep tutorijal
Cestitam kolega :) .... svaka cast
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-a-1.sezampro.yu.



+395 Profil

icon Re: mfc C++ - čitanje slike29.06.2008. u 14:14 - pre 192 meseci
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) ; 



Viva lollapalooza
 
Odgovor na temu

Eurora3D Team
Nebojsa - Programer & Vodja tima
Beograd

Član broj: 120376
Poruke: 900
91.148.112.*



+7 Profil

icon Re: mfc C++ - čitanje slike30.06.2008. u 01:02 - pre 192 meseci
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

 
Odgovor na temu

[es] :: C/C++ programiranje :: mfc C++ - čitanje slike

[ Pregleda: 2070 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.