Hello,
j'ai créé un HBitmap afin de créer un bitmap dans un picture à partir d'un buffer contenant une frame.
Mais à présent ... comment afficher le HBITMAP dans ma fenetre ??
Quelqu un saurait comment faire ??
merci d'avance
Hello,
j'ai créé un HBitmap afin de créer un bitmap dans un picture à partir d'un buffer contenant une frame.
Mais à présent ... comment afficher le HBITMAP dans ma fenetre ??
Quelqu un saurait comment faire ??
merci d'avance
ok mais il ne faut pas déja utiliser SelectObject avant ?
En premier je fais un CBmp->CreateBitmap(etc...)
j'avais déja vu ça sur la MSDN de Microsoft...
Je faisais un SelectObject(..la je passe le pointeur CBmp).
Ensuite ils disent justement d'utiliser BitBlt....
Mais il y a pleins de paramètres donc des coordonnées et un pointeur vers le CDC Object... mais mon objet Picture n'est pas de type CDC mais HDC si je me souviens bien ....
tu peux te servir de l'exemple de la faq http://c.developpez.com/faq/vc/?page=GDI#DrawBitmap, sachant qu'au lieu d'utiliser la méthode membre bitblt de la class CDC, tu pourras utiliser l'api win32 bitblt, qui possède un paramètre de plus (le premier), qui est un HDC
Ok donc dans mon cas je dois tous passer par GDI donc ??
c'est a dire que le SelectObject aussi....?
sinon, tu peux aussi construire un CDC à partir d'un HDC avec la méthode FromHandle
En fait voici ma partie de code ou j'essaie de creer tout ca:
mais après... avec la méthode que tu me propose :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Cbmp_frame->CreateBitmap(Falconscr->GetWidth(),Falconscr->GetHeight(),1,3,imgBuffer); pHDC=CreateCompatibleDC(NULL); SelectObject(pHDC,(HBITMAP)Cbmp_frame);
je vois pas ou placer m_VideoModified qui est mon CStatic correspondant à ma Picture
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 BitBlt( ?????, 0, 0, Falconscr->GetWidth(), Falconscr->GetHeight(), pHDC, 0, 0, SRCCOPY);
tu utilises la méthode GetDC() sur ton controle picture qui te renvoie un CDC, et tu pourras appeler la méthode BitBlt de ce CDC
Il me met une erreur d'assertion.... et aucune image s'affiche.....
pourtant ça m'a l'air correct....
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 void CFastFace_InterfaceDlg::OnInitializeCam() { Falconscr = new FalconSource(BOARD_NUMBER,INPUT,IMG_WIDTH,IMG_HEIGHT); Cbmp_frame= new CBitmap(); CDC_Mem = new CDC(); } #define DELETE_OBJ(oBJ) {if(oBJ!=NULL){delete oBJ; oBJ = NULL;}} void CFastFace_InterfaceDlg::OnStartCapture() { m_VideoNotModifiedDC=m_VideoNotModified.GetDC(); CDC_Mem->CreateCompatibleDC(m_VideoNotModifiedDC); imgBuffer=(unsigned char*)malloc(Falconscr->GetHeight()*Falconscr->GetWidth()*3*sizeof(char)); while (NoStop) { Falconscr->Capture(); Falconscr->GetImage(&imgBuffer); Falconscr->PumpMessages(); Cbmp_frame->CreateBitmap(Falconscr->GetWidth(),Falconscr->GetHeight(),1,3,imgBuffer); CBitmap* pOldBitmap = CDC_Mem->SelectObject(Cbmp_frame); m_VideoNotModifiedDC->BitBlt(0,0,Falconscr->GetWidth(),Falconscr->GetHeight(),CDC_Mem,0,0,SRCCOPY); } free(imgBuffer); }
a quel endroit l'assertion, et quel type d'assertion ?
a voir au debugger c'est quand je repasse dans la boucle au 2ème tour à l'endroit suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Cbmp_frame->CreateBitmap(Falconscr->GetWidth(),Falconscr->GetHeight(),1,3,imgBuffer);
type d'assertion dans le fichier wingdi.cpp a la ligne 1120 mais j'en sais pas plus
c'est pas imgBuffer qui est pas bon ?
Sinon, pour ton affichage, peut-etre que cette méthode dans la faq est meilleure : http://c.developpez.com/faq/vc/?page...awBitmapInCtrl
a voir au debbuger... l'image qu'il me retourne est ok...
ok pour l'assertion c'est bon j'ai trouvé... comme Cbmp_frame existe déja il suffit de faire un DeleteObj à chaque fin de boucle..
par contre j'ai une nouvelle erreur d'assertion mais cette fois c'est afxwin1.inl qui pose problème
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager