Bonjour,
J'ai un projet d'�tude qui consiste � param�trer et capturer des images � partir d'une cam�ra de type IEEE 1394 (FireWire) connect�e � un ordinateur.
Mon application est pour le moment d�velopp�e en C++, de type MFC SDI.
(Compil�e � l'aide de Microsoft Visual Studio .NET 2003).
Je me sers d'une librairie open source se nommant 1394camera pour "dialoguer" avec la cam�ra.
(http://www.cs.cmu.edu/~iwan/1394/index.html)
Le probl�me est que j'arrive, avec une fonction, � afficher en "temps-r�el" les images captur�es par la cam�ra sur l'�cran (dans la zone d�finie par l'application MFC), mais je ne sais pas comment faire pour enregistrer une image captur�e dans un fichier.
Est-il possible � partir de DIB de cr�er un fichier, de type bitmap ou autre, sur le disque ?
Plusieurs pistes me sont venues, utilisation de CFile, CreateBitmap(), venants de projets "samples" de Microsoft qui abordent ce sujet.
Voila une partie du code qui affiche les images � l'�cran (je pense que c'est celle qui fait le boulot) :
On aper�oit la fonction de la classe C1394Camera "maCamera.getDIB" qui va chercher les donn�es.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 if(GotFrame) { BITMAPINFO bmi; unsigned long wd,ht; maCamera.GetVideoFrameDimensions(&wd,&ht); bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biWidth = (long) wd; bmi.bmiHeader.biHeight = (long) ht; bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biBitCount = 24; bmi.bmiHeader.biCompression = BI_RGB; bmi.bmiHeader.biSizeImage = 0; bmi.bmiHeader.biXPelsPerMeter = 1000; bmi.bmiHeader.biYPelsPerMeter = 1000; bmi.bmiHeader.biClrUsed = 0; bmi.bmiHeader.biClrImportant = 0; RECT rect; int x,y,w,h,i=0, timeouts = 0; unsigned long sum = 0, t=clock(),totaldropped = 0; int drop = 0; CDC *pDC = pWnd->GetViewDC(); HDC hDC = pDC->m_hDC; BOOL DropStuff = TRUE; pWnd->GetWindowRect(&rect); h = rect.bottom - rect.top - theApp.m_borderHeight; w = rect.right - rect.left - theApp.m_borderWidth; x = w - wd; x >>= 1; if(x < 0) x = 0; y = h - ht; y >>= 1; if(y < 0) y = 0; maCamera.getDIB(this->m_pBitmap,this->m_pBitmapLength); SetDIBitsToDevice(hDC, x, y, wd, ht, 0, 0, 0, ht, theApp.m_pBitmap, &bmi, DIB_RGB_COLORS); pWnd->ReleaseViewDC(pDC); }
Si quelqu'un connait la solution ? Merci.
Partager