IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[MFC]Comment afficher un HBITMAP DANS une fenetre Picture ?


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Profil pro
    Médecin
    Inscrit en
    Août 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2005
    Messages : 49
    Points : 27
    Points
    27
    Par défaut [MFC]Comment afficher un HBITMAP DANS une fenetre Picture ?
    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

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    il faut utiliser bitblt

  3. #3
    Nouveau membre du Club
    Profil pro
    Médecin
    Inscrit en
    Août 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2005
    Messages : 49
    Points : 27
    Points
    27
    Par défaut
    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 ....

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    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

  5. #5
    Nouveau membre du Club
    Profil pro
    Médecin
    Inscrit en
    Août 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2005
    Messages : 49
    Points : 27
    Points
    27
    Par défaut
    Ok donc dans mon cas je dois tous passer par GDI donc ??

    c'est a dire que le SelectObject aussi....?

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    sinon, tu peux aussi construire un CDC à partir d'un HDC avec la méthode FromHandle

  7. #7
    Nouveau membre du Club
    Profil pro
    Médecin
    Inscrit en
    Août 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2005
    Messages : 49
    Points : 27
    Points
    27
    Par défaut
    En fait voici ma partie de code ou j'essaie de creer tout ca:

    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);
    mais après... avec la méthode que tu me propose :

    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);
    je vois pas ou placer m_VideoModified qui est mon CStatic correspondant à ma Picture

  8. #8
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    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

  9. #9
    Nouveau membre du Club
    Profil pro
    Médecin
    Inscrit en
    Août 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2005
    Messages : 49
    Points : 27
    Points
    27
    Par défaut
    Il me met une erreur d'assertion.... et aucune image s'affiche.....


    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);
    }
    pourtant ça m'a l'air correct....

  10. #10
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    a quel endroit l'assertion, et quel type d'assertion ?

  11. #11
    Nouveau membre du Club
    Profil pro
    Médecin
    Inscrit en
    Août 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2005
    Messages : 49
    Points : 27
    Points
    27
    Par défaut
    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

  12. #12
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    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

  13. #13
    Nouveau membre du Club
    Profil pro
    Médecin
    Inscrit en
    Août 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2005
    Messages : 49
    Points : 27
    Points
    27
    Par défaut
    a voir au debbuger... l'image qu'il me retourne est ok...

  14. #14
    Nouveau membre du Club
    Profil pro
    Médecin
    Inscrit en
    Août 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2005
    Messages : 49
    Points : 27
    Points
    27
    Par défaut
    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

Discussions similaires

  1. Réponses: 12
    Dernier message: 08/02/2006, 17h28
  2. Réponses: 4
    Dernier message: 22/11/2005, 17h50
  3. comment modifier les widgets dans une fenètre??
    Par afrikha dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 14/10/2005, 14h48
  4. Comment afficher des JPEG dans une application Delphi ?
    Par Bouguennec dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/09/2005, 21h18
  5. Comment afficher les toolTipText dans une zone de statut ?
    Par nicok01 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 28/01/2005, 13h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo