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 :

aide pour afficher une image


Sujet :

MFC

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1
    Points : 2
    Points
    2
    Par défaut aide pour afficher une image
    bonsoir,
    je doit faire un petit programme mfc pour afficher une image de telle format, pour l'instant je vais afficher une BMP(et d'autre propriétés;nbres de pixels...mais par la suite), pour débuté j'ai chercher une classe qui contient les fonctions que j'ai besoin de la suite, donc j'ai opté a utilisr la classe Cimage, le pb que je suis débutante en visual c ++ 6.0 et j'ai besoin de s'avoire comment je peut utiliser les fonctions de cette classe et comment l'integrire a mon programme!!
    SVP c urg

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    pense a faire des recherches dans MSDN, on trouve des exemples d'utilisation.
    la classe CImage est assez simple.
    on charge le l'objet à partir d'un fichier externe a l'application ou d'un bitmap.
    et dans la méthode de dessin appropriée on projette l'image sur la surface d'affichage.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CImage image;
    image.Load("Monbitmap.bmp");// a partir d'un fichier
    //ou image.LoadFromResource(AfxGetInstanceHandle( ),IDB_BITMAP);// a partir d'une ressource.
    Affichage dans une méthode Ondraw ou Paint d'une fenêtre .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    image.BitBlt(dc, 0, 0, 
            image.GetWidth(),image.GetHeight(), 0, 0);

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 23
    Points : 22
    Points
    22
    Par défaut FindResource() Failed
    Salut tout le monde

    J'ai inseré le picture.cpp et le picture.h dans mon environnement de travail comme c'est indiqué...
    Mais en essayons de visualiser une image bitmap comme ca :

    CPicture image;
    image.Load(IDB_SplachScreen1,"SplachScreen1.bmp");// a partir d'un fichier

    un message d'erreur s'affiche FindRessource() Failed

    J'ai meme essayé d'utiliser cette commande :

    image.Load("SplachScreen1.bmp")

    Malgres que je suis sure du chemin du fichier, il m'affiche :
    Impossible de trouver SplachScreen1.bmp.

    Y a t il qq qui peut m'aider
    Merci d'avance

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 23
    Points : 22
    Points
    22
    Par défaut VS 2005
    Désolé
    Notez bien que je travaille sous VS 2005 pour réaliser une application MFC MDI

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Salut,
    je débute également en C++ et j'essaie pour l'instant d'afficher une image toute simple.
    J'ai effectivement trouvé la classe CImage et je pensais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CPaintDC dc(this);
    image.Draw(dc, 0, 0, image.GetWidth(), image.GetHeight());
    Malheureusement, cela ne plante pas mais rien ne s'affiche...
    Vous avez une idée?
    (pour info, j'ai commencé sous Visual C++ un projet MFC prenant en charge l'architecture document/vue... je ne sais pas si ca change qq chose?
    Et par la suite, ca plante lorsque je resize ma fenetre...)

  6. #6
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 382
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 382
    Points : 20 453
    Points
    20 453
    Par défaut
    Citation Envoyé par nmeddouri Voir le message
    CPicture image;
    image.Load(IDB_SplachScreen1,"SplachScreen1.bmp");// a partir d'un fichier
    un message d'erreur s'affiche FindRessource() Failed

    Tu tentes de charger un fichier sur disque alors que la méthode doit passer obligateoirement par un fichier compilé en ressources.

    Citation Envoyé par GilMo Voir le message
    Salut,
    je débute également en C++ et j'essaie pour l'instant d'afficher une image toute simple.
    J'ai effectivement trouvé la classe CImage et je pensais faire :
    ....
    Malheureusement, cela ne plante pas mais rien ne s'affiche...
    Vous avez une idée?
    Pour le plantage faut apprendre à se servir du debugger et des point d'arrêts..
    Le code est insuffisant : comment est chargée ou crée l'image ?
    Au besoin il faut créer un HBITMAP et appeler CImage::Attach

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Mat,
    Effectivement, le debugger me dit que j'ai un probleme avec hBitmap...

    Dans mon code, j'ai juste fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    image.Load(nomdefichier)
    dans ma fonction qui charge un document (Serialize). L'image est donc juste chargée et non créée ?

    Et dans le code d'affichage (Draw), j'ai donc fait un
    mais j'ai beau regarder dans les forums et dans l'aide, je ne vois pas comment et où créer et attacher un HBITMAP...
    Merci de ton aide!

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Re-salut,

    j'ai un peu changé mon code et je n'arrive toujours pas à afficher mon image
    voici ce que j'ai fait dans ma fonction OnDraw:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CImage image = image.Load(pDoc->m_strFileName);
    CBitmap* pBitmap = pDC->GetCurrentBitmap();
    HBITMAP hBitmap = HBITMAP(pBitmap);
    CPaintDC dc(this);
    image.Attach(hBitmap);
    image.Draw(dc, 0, 0, image.GetWidth(), image.GetHeight());
    Et apparement, il ne connait toujours pas la bitmap...
    Est-ce que vous avez une idée ?
    Merci,

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Un bitmap ne peut pas être sélectionné dans deux DC à la fois, donc si les méthodes de CImage utilisent un DC pour dessiner l'image...

    Edit: Et c'est confirmé:
    Citation Envoyé par [URL=http://msdn.microsoft.com/en-us/library/bwea7by5%28VS.80%29.aspx]La doc de CImage[/URL]
    CImage cannot be selected into a new CDC. CImage creates its own HDC for the image. Because an HBITMAP can only be selected into one HDC at a time, the HBITMAP associated with the CImage cannot be selected into another HDC. If you need a CDC, retrieve the HDC from the CImage and give it to CDC::FromHandle.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Désolé, je ne comprend pas
    Où est-ce que je créé 2 DC ?
    Pour moi, je n'ai qu'un seul DC, celui où je veux afficher mon image...

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Citation Envoyé par GilMo
    pDC->GetCurrentBitmap();
    Le bitmap est sélectionné dans un DC avant que tu cherches à le mettre dans la CImage. Donc, ça ne marche pas car chaque objet CImage possède son propre DC et cherche à mettre le bitmap dedans --> Échec.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Salut, j'ai finalement réussi à afficher mon image.

    voici mon code (y a pas plus simple!!)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CImage image;
    image.Load(pDoc->m_strFileName);
    image.Draw(*pDC,0,0,image.GetWidth(),image.GetHeight());
    en fait, le pDC peut être passer en paramêtre de la fonction OnDraw... et c'est ce qui me manquait!!

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Je n'y arrive pas.
    J'ai exactement le même problème d'affichage d'image en dynamique en MFC sous VCPP 6.0.
    Les réponses ne semblent pas convenir à VCPP 6.0 car la classe CImage dont je dispose ne comprend pas la fonction "Load".
    Est-ce que cette classe a évolué depuis la version 6.0 ?
    Est-ce que j'ai bien la bonne version de cette classe ?
    Le nom de cette classe est-il "CImage" ou "CPicture" ?

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

Discussions similaires

  1. Besoin d'aide pour afficher une image dans un applet
    Par argon dans le forum AWT/Swing
    Réponses: 16
    Dernier message: 19/01/2006, 19h45
  2. [MFC]Problème pour afficher une image.
    Par Deedier dans le forum MFC
    Réponses: 4
    Dernier message: 25/03/2005, 16h13
  3. Réponses: 13
    Dernier message: 23/12/2004, 18h01
  4. Réponses: 7
    Dernier message: 21/10/2004, 09h13
  5. Comment faire pour afficher une image ds une dbgrid
    Par totomaze dans le forum Bases de données
    Réponses: 2
    Dernier message: 16/10/2004, 15h31

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