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) :

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);
	}
On aper�oit la fonction de la classe C1394Camera "maCamera.getDIB" qui va chercher les donn�es.


Si quelqu'un connait la solution ? Merci.