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 :

affichage d'une image


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut affichage d'une image
    Bonjour,

    je cherche a afficher une image a partir d'un programme en C, avec GTK

    Merci pour votre aide

    ++

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Salut, gtk_image_new_from_file devrait convenir ... sinon plus de détails si cela ne te conviens pas !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut
    j'ai essayer avec la fonction gtk_image_new_from_file mais rien a faire, ca ne marche pas (il me met une feuille blanche avec une croix rouge a l'intérieur à la place de l'image)

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par gy0m76
    j'ai essayer avec la fonction gtk_image_new_from_file mais rien a faire, ca ne marche pas (il me met une feuille blanche avec une croix rouge a l'intérieur à la place de l'image)
    Oui, cela indique qu'il y'a eu une erreur pendant le chargement de l'image ... peut-être est-ce une image avec un format non supporté, enregistre voir ton image en JPG par exemple et tente le coup à nouveau, sinon vérifie bien que le chemin indiqué est correcte !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Tu peux aussi utiliser une autre approche qui te permet de détecter les éventuelles erreurs soit en utilisation d'abord la fonction gdk_pixbuf_new_from_file puis si le chargement a réussi, tu peux ensuite utiliser la fonction gtk_image_new_from_pixbuf
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut
    voici mes 2 lignes de commandes

    pPixBufA = gdk_pixbuf_new_from_file("/usr/share/pixmaps/10.png", NULL);
    pPixBufB = gdk_pixbuf_new_from_file("/usr/share/pixmaps/11.jpg", NULL);

    j'ai essayer en jpg en png, ca ne change rien...

  7. #7
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par gy0m76
    voici mes 2 lignes de commandes

    pPixBufA = gdk_pixbuf_new_from_file("/usr/share/pixmaps/10.png", NULL);
    pPixBufB = gdk_pixbuf_new_from_file("/usr/share/pixmaps/11.jpg", NULL);

    j'ai essayer en jpg en png, ca ne change rien...
    L'avantage de cette fonction est la possibilité d'avoir un message d'erreur clair et en générale, assez précis sur l'erreur rencontrée mais, si tu laisse l'argument sur la valeur NULL, tu ne risques pas de savoir pourquoi il y'a une erreur pendant le chargement ... ce n'est pas pour faire beau ou plus pro que je t'ai proposé cette fonction !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  8. #8
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut
    ke veut tu ke je mette a la place??? J'ai essayer avec un 0, mais ca ne donne rien...

  9. #9
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par gy0m76
    ke veut tu ke je mette a la place??? J'ai essayer avec un 0, mais ca ne donne rien...
    Tu as pourtant le prototype sur le lien que je t'ai donné, je vois rien de compliqué:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GdkPixbuf*  gdk_pixbuf_new_from_file        (const char *filename,
                                                 GError **error);
    soit un appel avec gestion d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <glib/gprintf.h>
    ...
    GError * error;
    ...
    pPixBufA = gdk_pixbuf_new_from_file("/usr/share/pixmaps/10.png", &error);
     
    if (pPixBufA == NULL)
    {
       g_printf ("%s\n", error->message);
       g_error_free (error);
    }
    Là au moins tu sais quelle est la cause de l'erreur !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  10. #10
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut
    maintenant ca plante lorsque j'execute mon programme...

    j'ai une autre petite question, cmt fait ton pour recupérer une variable saisie dans un GtkEntry. Je saise des chiffres, et je souhaite multiplier cette valeur par un nombre réel.

  11. #11
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par gy0m76
    maintenant ca plante lorsque j'execute mon programme...
    Essaye en mettant le pointeur à la valeur NULL:
    Voici ce que ca pourrait donner au final avec encore un peu plus de protection:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <glib/gprintf.h>
    ...
    GError * error = NULL;
    ...
    pPixBufA = gdk_pixbuf_new_from_file("/usr/share/pixmaps/10.png", &error);
     
    if (pPixBufA == NULL && error != NULL)
    {
       g_printf ("%s\n", error->message);
       g_error_free (error);
    }
    Sinon il n'y a pas de raison que ca plante

    Citation Envoyé par gy0m76
    j'ai une autre petite question, cmt fait ton pour recupérer une variable saisie dans un GtkEntry. Je saise des chiffres, et je souhaite multiplier cette valeur par un nombre réel.
    Bin suffit de regarder encore une fois dans la ref de l'API de GTK+ dans la parties des GtkEntry soit la fonction: gtk_entry_get_text. Il te suffit ensuite de convertir ta chaîne avec par exemple la fonction g_strtod
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  12. #12
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut
    pPixBufA = gdk_pixbuf_new_from_file("/usr/share/pixmaps/10.png", &error);

    J'ai une erreur sur cette ligne, il me dit que l'assignation n'est pas bonne...???

    23 C:\Documents and Settings\Administrateur\Mes documents\Gy0m\main.c [Warning] assignment from incompatible pointer type

  13. #13
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par gy0m76
    pPixBufA = gdk_pixbuf_new_from_file("/usr/share/pixmaps/10.png", &error);

    J'ai une erreur sur cette ligne, il me dit que l'assignation n'est pas bonne...???

    23 C:\Documents and Settings\Administrateur\Mes documents\Gy0m\main.c [Warning] assignment from incompatible pointer type
    Heu j'espère au moins que tu as le bon réflexe de sorte que ton pointeur pPixBufA soit du type GdkPixbuf et non pas un simple GtkWidget !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  14. #14
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut
    oui j'ai eu le bon reflexe,

    je ne voit vraiment pas d'ou vient l'erreur, a part peut etre dans mon installation, j'ai installer gtk+-dev-2.10.6, gtk-2_10_3-runtime et gtk_dev_2.10.3. Ne me manquerrait t'il pas qqch, ou les ai je mal installer...???

    Pour en etre sur, qq pourrai t'il tester ce prgm plz...

    #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);

    /* Chargement d'une image a partir d'un fichier */
    pImage = gtk_image_new_from_file("./gtk.png");
    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);

    /* Chargement d'une image a partir d'un GtkStockItem */
    pQuitImage = gtk_image_new_from_stock(GTK_STOCK_QUIT, GTK_ICON_SIZE_LARGE_TOOLBAR);
    gtk_container_add(GTK_CONTAINER(pQuitBtn), pQuitImage);

    gtk_widget_show_all(pWindow);

    gtk_main();

    return EXIT_SUCCESS;
    }

  15. #15
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Aucun problème avec ce code mais le mieux aurait été que tu donnes le code qui te pose problème, peut-être y'a-t-il quelque chose que tu n'as pas vu, vas savoir !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  16. #16
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut
    c'est celui-ci ki me donne pb, normalement il devrait marcher, mais j'ai une croix rouge a la place de l'image...

  17. #17
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par gy0m76
    c'est celui-ci ki me donne pb, normalement il devrait marcher, mais j'ai une croix rouge a la place de l'image...
    Et est-ce que tu as essayé avec ce code la manière que je t'ai montré ? Tuas bien mis le fichier PNG dans le même dossier que ton exe ? Une croix rouge indique une erreur de chargement donc au choix, format non supporté ou bien impossible de lire/trouver le fichier !

    Passe le code sur lequel tu as utilisé les fonctions de GDK et aussi ton image, met tout ca dans un zip puis met-le en pièce jointe à ton prochain post, c'est la meilleure façon de t'aider ! Sinon je ne vois pas et peut rien faire de plus
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  18. #18
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut
    merci pour ton aide, je te joint mon code et l'image.

    ps: mnt je n'est plus la croix rouge, ya plus rien!!!!
    Fichiers attachés Fichiers attachés

  19. #19
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    En fait chez moi ca fonctionne, que ce soit sous Linux ou Windows mais ca marche, du moins avec la version 2.8.x de GTK+

    Juste un truc que j'ai oublié de te dire, quand on créé un GdkPixbuf, une fois qu'il n'est plus utilisé il faut détruire l'objet avec la fonction gdk_pixbuf_unref qui comme seul argument le GdkPixbuf
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  20. #20
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 151
    Par défaut
    ok, tu a du ajouter gdk_pixbuf_unref dans ton code pour que ca marche?

    Si oui, a kel nivo l'a tu ajouter?

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

Discussions similaires

  1. [Tomcat] Affichage d'une image
    Par david71 dans le forum Tomcat et TomEE
    Réponses: 8
    Dernier message: 15/02/2005, 11h37
  2. Réponses: 2
    Dernier message: 27/12/2004, 09h23
  3. Pbs d'affichage d'une image sur un panel
    Par ysr1 dans le forum C++Builder
    Réponses: 2
    Dernier message: 23/09/2004, 09h55
  4. [FLASH MX] Qualité d'affichage d'une image
    Par n_tony dans le forum Flash
    Réponses: 3
    Dernier message: 16/08/2004, 09h44
  5. Affichage d'une image sous linux
    Par Braim dans le forum x86 32-bits / 64-bits
    Réponses: 5
    Dernier message: 25/03/2003, 10h41

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