Afficher un CBitmap

Afficher un CBitmap - C++ - Programmation

Marsh Posté le 13-01-2011 à 12:26:17    

Bonjour a tous !
 
Alors voilà, mon "problème" est simple, je cherche afficher un CBitmap dans une fenêtre.
 
Pour cela, sous Visual studio 6, je créer donc une "case" bitmap (c'est un projet en mode graphique), mais ensuite . . .
 
J'ai bien mon CBitmap qui s'appelle "MonImage", qui est en fait l'image qui s'affiche par une webcam Axis, et je souhaite ensuite l'afficher (toujours en Bitmap) dans ma fenêtre (Afficher la vidéo quoi, mais en bitmap).
 
Je fais cela pour pouvoir ensuite modifier les image pixel par pixel, je pense que c'est une bonne méthode (peu être pas la meilleure, mais bon . . . ^^')
 
Enfin voilà, du coup si quelqu'un peut m'aider a trouver comment l'afficher, je l'en remercie :) (Sur internet, c'est pas les aides qui manquent, mais j'ai rien compris avec leurs histoire de CDC . . .)

Reply

Marsh Posté le 13-01-2011 à 12:26:17   

Reply

Marsh Posté le 15-01-2011 à 23:54:41    

Nlice a écrit :

Bonjour a tous !
[...]
 (Sur internet, c'est pas les aides qui manquent, mais j'ai rien compris avec leurs histoire de CDC . . .)


... et pourtant !

 

l'utilisation d'un Device Context (le fameux CDC) est indispensable si tu souhaites effectuer le rendu d'un CBitmap. je vais pas m'étendre sur le sujet, je vais juste te renvoyer sur ce lien pour en apprendre davantage à ce sujet : http://msdn.microsoft.com/en-us/li [...] s.80).aspx

 

une fois que tu as compris le principe, tout coule de source :

Code :
  1. CString filename("C:\\myPicture.bmp" ); // chemin de ton fichier image
  2. HBITMAP hBmp = (HBITMAP)::LoadImage(NULL, filename, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION); // on créé un HBITMAP à partir de ce fichier
  3. CBitmap bmp; // on déclare un objet CBitmap, qui sera affiché dans ta fenêtre
  4. bmp.Attach(hBmp); // on initialise cet objet avec le HBITMAP précédent via la fonction Attach() qui permet de binder un HBITMAP à un CBitmap
  5.  
  6. CClientDC dc(this); // on récupère le Device Context de la fenêtre courante. C'est dans ce Device Context que le dessin va s'effectuer
  7. CDC bmDC; // on déclare un Device Context (classe CDC)
  8. bmDC.CreateCompatibleDC(&dc); // on créé un Device Context en mémoire compatible avec le Device Context de la fenêtre courante
  9. CBitmap *oldBmp = bmDC.SelectObject(&bmp);  // on affecte le CBitmap créé plus haut au Device Context créé, en sauvegardant l'ancien dans oldBmp
  10. BITMAP  bi;
  11. bmp.GetBitmap(&bi); // on récupère les données de ce CBitmap dans un BITMAP, pour pouvoir récupérer sa largeur et sa hauteur, nécessaires à la fonction BitBlt()
  12. dc.BitBlt(0,0,bi.bmWidth,bi.bmHeight,&bmDC,0,0,SRCCOPY); // et enfin on copie ce bitmap dans le Device Context de la fenêtre courante
  13. bmDC.SelectObject(oldBmp); // on restaure l'ancien CBitmap
 

Je te renvoie à la pierre angulaire de cette opération : la fonction BitBlt (http://msdn.microsoft.com/en-us/library/fcbk8779.aspx). Si tu arrives à comprendre comment fonctionne cette méthode, tout le code que je t'ai posté t'apparaitra limpide.

 


Message édité par Harkonnen le 15-01-2011 à 23:58:29

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 14-03-2011 à 20:44:28    

Merci beaucoup pour ton aide !
(Et désolé du retard ^^)
J'ai eu énormément de mal a comprendre comment fonctionne les CDC (franchement, minimum un mois, en tentant plein d'autres choses entre-deux)
J'ai (enfin) réussi grâce a la technique que tu m'as donnée, encore merci !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed