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.