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

GTK+ avec C & C++ Discussion :

[GTK+] problème d'affichage d'images JPEG


Sujet :

GTK+ avec C & C++

  1. #1
    Membre du Club Avatar de suzan_
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 87
    Points : 41
    Points
    41
    Par défaut [GTK+] problème d'affichage d'images JPEG
    Bonjour,

    J'ai créé un petit programme qui marche très bien avec une interface GTK+. J'utilise un certain nombre d'images JPEG. Sur mon ordinateur tout marche très bien mais quand j'exporte le code sur un autre ordinateur, d'abord les fenètres sont moins jolies et mes images JPEG n'apparaissent plus (à la place j'ai une croix rouge...).

    Je ne comprends pas pourquoi, j'ai tout compilé en mode Release, je crois avoir mis toutes les dll et mes images sont bien présentes sur l'autre ordinateur. Je précise que l'autre ordinateur est identique au mien avec Windows XP Pro sur les deux...

    De quoi cela peut-il venir?

    Merci d'avance

  2. #2
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Les croix rouges signifient que ton programme n'a pas réussi à trouver les images. Utilise le paramètre "GError *error" lors du chargement de ton image, il contient un message compréhensible te disant pourquoi le chargement a échoué. Tu y verras le chemin de l'image, qui ne correspond sans doute pas à celui où se trouvent réellement les images sur ton poste cible. Et en nous montrant un peu de code, ce sera plus clair.
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

  3. #3
    Membre du Club Avatar de suzan_
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 87
    Points : 41
    Points
    41
    Par défaut
    Merci je vais essayer avec Gerror.
    Mais je répète qu'encore une fois ça marche bien sur mon ordinateur c'est lorsque j'essaie d'exporter l'executable sur un autre ordi qu'il ne me prend pas les images.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
    int main(int argc, char **argv)
    {
        GtkWidget *pWindow;
        GtkWidget *pVBox;
        GtkWidget *pImage;
        GtkWidget *pQuitImage;
        GtkWidget *pQuitBtn;
     
        gtk_init(&argc, &argv);
     
        pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
        gtk_window_set_title(GTK_WINDOW(pWindow), "GtkImage");
        g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
     
        pVBox = gtk_vbox_new(FALSE, 0);
        gtk_container_add(GTK_CONTAINER(pWindow), pVBox);
     
     
        pImage = gtk_image_new_from_file("monimage.jpg");
        gtk_box_pack_start(GTK_BOX(pVBox), pImage, FALSE, FALSE, 5);
     
        pQuitBtn = gtk_button_new();
        gtk_box_pack_start(GTK_BOX(pVBox), pQuitBtn, TRUE, FALSE, 5);
        g_signal_connect(G_OBJECT(pQuitBtn), "clicked", G_CALLBACK(gtk_main_quit), NULL);
     
     
    gtk_widget_show_all(pWindow);
     
        gtk_main();
     
        return EXIT_SUCCESS;
    }
    Je confirme bien que "monimage.jpg" se trouve dans le même dossier que mon exécutable.Je pense que ca doit plutôt venir d'une bibliothèque ou un truc comme ça...

    Ou est ce que je dois mettre Gerror?

    Merci de ton aide

  4. #4
    Membre actif Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Points : 221
    Points
    221
    Par défaut
    Salut,

    Comme dit la doc de gtk_image_new_from_file, il faut que tu utilises gdk_pixbuf_new_from_file et gtk_image_new_from_pixbuf pour detecter les erreurs.
    En passant un GError en parametre à gdk_pixbuf_new_from_file

  5. #5
    Membre du Club Avatar de suzan_
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 87
    Points : 41
    Points
    41
    Par défaut
    Merci de m'aider

    Alors j'ai un peu avancé , j'ai mis le Gerror dans mon code comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	pixbuf=gdk_pixbuf_new_from_file ("image1.jpg",&erreur);
    	if(!pixbuf){
    	printf("test file load failure, error message: %s\n", erreur->message);
    	}
    	pImage=gtk_image_new_from_pixbuf(pixbuf);
    Ca marche bien maintenant j'ai la cause de mon erreur : la console me dit ::

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error message : Couldn't recognisze the image file format for file 'image1.jpg'


    En même temps je l'avais bien vu qu'il le reconnaissait pas
    Est ce que vous avez une idée de pourquoi il reconnait pas le format JPEG?

    Je vais essayer ce que tu propose artificier59 pour avoir un meilleur aspect des fenêtres.

  6. #6
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 293
    Points : 4 943
    Points
    4 943
    Billets dans le blog
    5
    Par défaut
    As-tu essayé d'écrire le chemin complet de ton image plutôt que juste son nom?

  7. #7
    Membre du Club Avatar de suzan_
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 87
    Points : 41
    Points
    41
    Par défaut
    Je viens d'essayer par acquis de conscience, mais ça ne change rien j'ai toujours le même message d'erreur. Son problème ne vient pas du fait qu'il ne trouve pas l'image car j'ai essayé en enlevant l'image et j'ai ce message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Failed to open file : "L://Mirror//image1.jpg" no such file or directory
    Le problème vient du fait qu'il n'arrive pas à ouvrir un JPEG. j'ai essayé avec un BMP et avec un GIF et j'ai toujours le même message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Couldn't recognize the imagefile format for file 'L://Mirror//image1.bmp'
    Est ce qu'il n'y a pas une dll ou une bibliothèque que j'ai oublié de mettre pour que GTK lise les images??

  8. #8
    Membre actif Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Points : 221
    Points
    221
    Par défaut
    Tu utilises codeblocks ? Si oui, sur ton pc, l'image doit être dans le répertoire du projet. Par contre sur l'autre pc, l'image doit être a côté de l'éxecutable.



    @susan_ je m'étais dit, vaut mieux vérifier, on sait jamais
    Pis surtout, si ça marche pas avec le chemin complet, en effet, le pb vient pas de là

  9. #9
    Membre du Club Avatar de suzan_
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 87
    Points : 41
    Points
    41
    Par défaut
    J'utilise Visual C++ et j'ai bien mis l'image à coté de l'exécutable. Mais comme je l'ai dit avant, mon image est bien trouvé sinon je n'aurai pas le même message d'erreur. C'est son format qui n'est pas supporté...

  10. #10
    Membre actif Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Points : 221
    Points
    221
    Par défaut
    Ah, aussi, chose importante, GLib alloue de la mémoire dans GError pour le message d'erreur. Il faut donc que tu libère le GError lorque tu n'en as plus besoin:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (/* erreur */) {
        g_error ("%s", error->message);
        g_error_free (error);
    }

  11. #11
    Membre du Club Avatar de suzan_
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 87
    Points : 41
    Points
    41
    Par défaut
    Ah ok je vais le faire, mais est ce qu'il me donnerait un message erroné si je libère pas le Gerror??

    Edit : je viens de faire le test et j"ai toujours le même message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Couldn't recognize the image file format for file 'L://Mirror//image1.jpg'

  12. #12
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 293
    Points : 4 943
    Points
    4 943
    Billets dans le blog
    5
    Par défaut
    On dirait qu'il te manque effectivement un morceau de la librairie Gtk+. Pour le Gerror non ca ne poserait pas ce genre de problème hormis la fuite mémoire.
    Pour en finir avec Gerror il est bon après l'avoir libéré de le remettre à NULL. Ainsi si tu l'utilises un peu plus bas dans ta fonction tu ne planteras pas lamentablement ton appli .

  13. #13
    Membre du Club Avatar de suzan_
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 87
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    On dirait qu'il te manque effectivement un morceau de la librairie Gtk+.
    Ah oui je crois aussi mais la question c'est laquelle. J'ai vraiment l'impression d'avoir mis toutes les dll...Est ce que quelqu'un sait la dll qui traite des images??

    Citation Envoyé par gerald3d Voir le message
    Pour le Gerror non ca ne poserait pas ce genre de problème hormis la fuite mémoire.
    Pour en finir avec Gerror il est bon après l'avoir libéré de le remettre à NULL. Ainsi si tu l'utilises un peu plus bas dans ta fonction tu ne planteras pas lamentablement ton appli .
    Merci je vais le faire

  14. #14
    Membre du Club Avatar de suzan_
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 87
    Points : 41
    Points
    41
    Par défaut
    Je crois que je suis pas loin de la solution...

    J'ai ajouté les dll de GTK à coté de mon exécutable sur l'ordinateur ou le programme marche (celui ou j'ai conçu le programme).
    Et la surprise !! J'obtenais la même erreur. Il ne voulais plus m'afficher les JPEG et me mettait toujours le message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Couldn't recognize the image file format for file 'L://Mirror//image1.jpg'
    J'ai donc enlever une à une les dll que j'ai rajouté afin d'isoler la fautive : il s'agit de libgdk_pixbuf-2.0-0.dll

    Quand je l'enlève sur l'ordinateur du départ tout remarche.

    Évidemment quand je l'enlève de l'ordinateur ou je veux exporter mon exécutable et bien la mon exécutable me dis qu'il en a besoin pour faire tourner l'application....

    Je sais plus quoi faire ...
    Please help!

  15. #15
    Membre du Club Avatar de suzan_
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 87
    Points : 41
    Points
    41
    Par défaut
    Bon j'y suis arrivée

    Comme je n'arrivais pas à enlever libgdk_pixbuf-2.0-0.dll sans que mon programme râle j'ai installé GTK sur l'ordinateur ou je voulais exporter la librairie.

    C'est pas très jolie mais au moins je peux enlever libgdk_pixbuf-2.0-0.dll et mon programme affiche correctement les images...
    C'est un peu nul d'avoir à réinstaller GTK (même si ça prend 2min...) Je suis décue, je suis une fille un peu perfectionniste en même temps

    bref je mets résolu mais si quelqu'un a une idée concernant ce problème : savoir pourquoi libgdk_pixbuf-2.0-0.dll empêche de lire des images JPEG... quand on exporte le code...

    Merci à tous pour votre aide en tout cas

  16. #16
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    C'est libgdk_pixbuf qui s'occupe d'afficher les images. Elle utilise pour cela les pixbufs-loaders, qui sont une série de bibliothèques, chacune adaptée à un format de fichier. En tout cas c'est le cas sous Linux, où chaque format a sa bibliothèque dédiée. Sous Windows, elles semblent être intégrées à la libgdk_pixbuf, ou alors la libgdk_pixbuf va utiliser les fonctions du sytème natif (ton Windows) pour décoder ces fichiers.

    Je ne comprends pas trop ce que tu as transféré comme fichiers avec ton exécutable sur la machine cible, mais tu as forcément besoin d'avoir toutes les bibliothèques nécessaires à GTK+ installées sur la machine cible... Ton exécutable dépend de ces bibliothèques.
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

  17. #17
    Membre à l'essai
    Femme Profil pro
    informatique
    Inscrit en
    Juillet 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 27
    Points : 14
    Points
    14
    Par défaut salut
    bonjour, j'ai besoin de votre aide ,je viens de commencer faire mon program mais je sais pour quoi il n'accepte pas
    #include <gtk/gtk.h>
    #include <gdk/gdkrgb.h>
    (impossible d'ouvrir ce fichier source)

    merci d'avance

  18. #18
    Membre à l'essai
    Femme Profil pro
    informatique
    Inscrit en
    Juillet 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 27
    Points : 14
    Points
    14
    Par défaut bonjour
    je veux savoir kel parmis c'est program est plus facile pour faire une image sur c++ gnuplot ou bien gtk+

    merci

  19. #19
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Citation Envoyé par hey kong Voir le message
    je veux savoir kel parmis c'est program est plus facile pour faire une image sur c++ gnuplot ou bien gtk+
    Merci de ne pas détourner ce fil de discussion. Si tu as une question à poser, ouvre ton propre fil de discussion, mais ne viens pas commenter un vieux fil sans aucun rapport.
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

  20. #20
    Membre à l'essai
    Femme Profil pro
    informatique
    Inscrit en
    Juillet 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par liberforce Voir le message
    Merci de ne pas détourner ce fil de discussion. Si tu as une question à poser, ouvre ton propre fil de discussion, mais ne viens pas commenter un vieux fil sans aucun rapport.
    ok , j'ai créer troix discussions merci de les voirs

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème d'affichage d'image...
    Par fabreizhad dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 21/03/2006, 12h43
  2. problème d'affichage d'image avec mozilla
    Par lyon31 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 16/03/2006, 16h27
  3. Problème d'affichage d'image
    Par AurelBUD dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/09/2005, 11h56
  4. [SGBD] affichage d'image jpeg depuis une base mysql
    Par eric_300 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/09/2005, 12h27
  5. CSS Probléme d'affichage d'images
    Par tebonb dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 01/06/2005, 18h35

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