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

C++ Discussion :

Rafraichir une image bitmap (niveau débutant)


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 45
    Par défaut Rafraichir une image bitmap (niveau débutant)
    Question de débutant en VC++ à propos de bitmap.

    Je charge un fichier bmp à partir d'un fichier. Le code est simple dans OnPaint():

    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
     
    	CPaintDC dc(this); // device context for painting
    	HBITMAP bmpHandle = (HBITMAP)LoadImage(NULL,	m_PictureName,						IMAGE_BITMAP,
    	0,
    	0,						LR_LOADFROMFILE);
    	CBitmap bmpPicture;
    	CDC mdcPicture;
    	CBitmap *bmpFromHandle = bmpPicture.FromHandle(bmpHandle);
     
    	CRect rctPicture;
    	m_Picture.GetWindowRect(&rctPicture);
     
    	mdcPicture.CreateCompatibleDC(&dc);
    	CBitmap * bmpPrevious = mdcPicture.SelectObject(bmpFromHandle);
     
    	ScreenToClient(&rctPicture);
     
    	dc.BitBlt(rctPicture.left, rctPicture.top,
    		  rctPicture.Width(), rctPicture.Height(),
    		  &mdcPicture, 0, 0, SRCCOPY);
     
    	dc.SelectObject(bmpPrevious);
    	DeleteObject(bmpHandle);
    Comment dois je faire pour rafraichir l'image (i.e. envoyer le message pour forcer le OnPaint) après avoir mis à jour m_PictureName ?
    C'est sans aucun doute tout bête mais je ne programme que des DLL de type mathématiques sans interface utilisateur...

    Merci d'avance,

  2. #2
    Membre confirmé Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par défaut
    Bonjour,
    utilises simplement la fonction InvalidateRect lorsque tu souhaite rafraichir la fenêtre (ou une partie) http://msdn2.microsoft.com/en-us/lib...93(VS.85).aspx

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 45
    Par défaut
    Ça ne marche pas, mais merci quand même.
    Je vais bien finir par trouver.

  4. #4
    Membre confirmé Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par défaut
    Pour windows API, la fonction InvalidateRect, envoie le message WM_PAINT qui permet de rafraichir une fenêtre, par exemple utilises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InvalidateRect(hWnd,NULL,true);
    pour rafraichir toute la fenêtre correspondant au handle hWnd. Je ne vois pas pourquoi ça ne marcherai pas... Un test tout simple pour savoir si le problème vient du rafraichissement ou du code dans OnPaint() : Place InvalidateRect comme je te l'ai dit après le changement de m_PictureName, test la fonction (je suppose qu'à ce stade toujours rien)... ensuite réduis la fenêtre et agrandit la (par exemple)... Si la tu n'as toujours pas tes modifications appliquées le problème vient du code, sinon..... je vois pas

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 45
    Par défaut
    Merci,

    Oui, j'ai essayé ça ainsi que UpdateWindow() ...
    Puis ai décidé de coder autrement, puisque le WM_PAINT semble n'être activé à la création du dialogue. Le dialogue est fermé puis recréé à partir d'un m_PictureName défini dans le dialogue parent. Ce n'est qu'un petit utilitaire tutoriel et cette solution simpliste me suffit.
    Merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#]Rafraichir une image
    Par Scorff dans le forum ASP.NET
    Réponses: 7
    Dernier message: 21/06/2013, 18h53
  2. Réponses: 8
    Dernier message: 17/04/2005, 19h58
  3. Réponses: 6
    Dernier message: 22/12/2004, 11h00
  4. generer une image bitmap a partir d'une scene OGL
    Par FreshLog dans le forum OpenGL
    Réponses: 4
    Dernier message: 01/07/2003, 11h29
  5. Lecture d'une image bitmap
    Par Geronimo dans le forum x86 32-bits / 64-bits
    Réponses: 18
    Dernier message: 28/06/2002, 12h01

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