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 :

Aide pour insertion d'une image récupérée à partir d'un blob mysql dans une GtkImage.


Sujet :

GTK+ avec C & C++

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 38
    Points : 19
    Points
    19
    Par défaut [Résolu] Aide pour insertion d'une image récupérée à partir d'un blob mysql dans une GtkImage.
    Bonjour,
    Je suis entrain de développer une application de gestion des employées pour un stage.J'utilise le langage c + GTK + Glade 2.10.0 + mysql + api c mysql + msys + mingw sous windows.J'arrive à récupérer les données des employées et les afficher mais je bloque dans la récupération des photos des employées qui sont de type blob et les insérer dans un widget de type GtkImage.
    J'ai un autre problème c que quand je génère l'executable et je l'éxecute il y a tjrs une console derrière mon application graphique est ce qu'il est possible de la supprimer.
    Enfin Vous ne connaissais pas par hasard comment afficher la palette de glade 2.10.0 j'ai essayé de cocher Show Pallette dans View mais ça donne rien.

    Merci pour vos réponses à l'avance.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Il faudrait savoir quel est le format de tes images... Y a une fonction pour créer un gdkpixbuf à partir de données en mémoire, elle devrait t'aider à faire ce que tu veux.

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Elles sont de type .jpg
    Je sais qu'il faut faire :
    GdkPixbuf *pixbuf = gtk_image_get_pixbuf(imagesrc);
    gtk_image_set_from_pixbuf(imagedes, pixbuf);
    tel que : imagesrc : blob mysql
    imagedes : GtkImage
    mais la fonction gtk_image_get_pixbuf(GtkImage *image) n'admet pas le resultat d'une requete sql.
    D'aprés ce que j'ai compris :
    1- ll faut d'abord récupérer l'image depuis mysql.
    2- l'enregistrer sur disque
    3- la charger dans pixbuf
    4 - pixbuf = gtk_image_get_pixbuf(image)
    5- gtk_image_set_from_pixbuf(GtkImage, pixbuf);
    Mais les étapes 1,2 et 3 je sais pas les faire.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Pour l'étape 1, je ne peux pas t'aider, ça doit être assez similaire à ce que tu as fait pour récupérer les autres données, sauf qu'il faut que tu récupères des données binaires cette fois ci. Une fois que tu as ça, tu peux utiliser gdk_pixbuf_new_from_data, ça t'évite de devoir écrire sur disque et relire l'image.

  5. #5
    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 smalldebian Voir le message
    Elles sont de type .jpg
    Je sais qu'il faut faire :
    GdkPixbuf *pixbuf = gtk_image_get_pixbuf(imagesrc);
    gtk_image_set_from_pixbuf(imagedes, pixbuf);
    tel que : imagesrc : blob mysql
    imagedes : GtkImage
    mais la fonction gtk_image_get_pixbuf(GtkImage *image) n'admet pas le resultat d'une requete sql.
    D'aprés ce que j'ai compris :
    1- ll faut d'abord récupérer l'image depuis mysql.
    2- l'enregistrer sur disque
    3- la charger dans pixbuf
    4 - pixbuf = gtk_image_get_pixbuf(image)
    5- gtk_image_set_from_pixbuf(GtkImage, pixbuf);
    Mais les étapes 1,2 et 3 je sais pas les faire.
    Ce serait plutôt :
    1. récupérer l'image sous forme de blob mysql
    2. créer un pixbuf avec à partir du blob avec gdk_pixbuf_new_from_data
    3. l'insérer dans le GtkImage avec gtk_image_set_from_pixbuf si la GtkImage existe déjà, ou gtk_image_new_from_pixbuf si la GtkImage n'est pas encore créee.
    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)

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Bonjour,
    J'ai fait :
    GdkPixbuf *pixbuf = gdk_pixbuf_new_from_data (row[11], GDK_COLORSPACE_RGB, FALSE, 8, 121, 135, 200, NULL, NULL);
    gtk_image_set_from_pixbuf(image1, pixbuf);

    avec row[11] resultat de mysql_real_query qui récupère des données binaires mais ça affiche une image qui ne ressemble pas à l'originale, J'ai bon changé les valeurs 121, 135, 200 mais ça n'a abouti à rien. Je crois qu'il faut utiliser autre chose que row[11] car dans la syntaxe de gdk_pixbuf_new_from_data il y a const guchar *data comme premier paramètre et moi je lui ai filer row qui est un pointeur sur le type MYSQL.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Euh oui, si tes données c'est du jpeg, j'ai dit des bêtises Faut utiliser http://library.gnome.org/devel/gdk-p...bufLoader.html pour obtenir un pixbuf à partir de tes données.

  8. #8
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Je vois pas comment la fonction
    GdkPixbufLoader * gdk_pixbuf_loader_new_with_type(const char *image_type,GError **error);
    va savoir quelle image il faut charger car il n ya pas ou mettre le resultat binaire de la requete mysql.

  9. #9
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    C'est expliqué dans le paragraphe Description comment ça marche... Il faut utiliser plusieurs fonctions, gdk_pixbuf_loader_new, gdk_pixbuf_loader_write, gdk_pixbuf_loader_close et gdk_pixbuf_loader_get_pixbuf.

  10. #10
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    J'ai fait:
    GdkPixbufLoader *pixbufloader = gdk_pixbuf_loader_new_with_type("jpg", NULL);
    gdk_pixbuf_loader_write(pixbufloader, row[11], 32768, NULL);
    gdk_pixbuf_loader_close(pixbufloader, NULL);
    pixbuf = gdk_pixbuf_loader_get_pixbuf(pixbufloader);
    gtk_image_set_from_pixbuf(image1, pixbuf);

    tjrs pas de résultats.Je signale que gdk_pixbuf_loader_write renvoie 0 et gdk_pixbuf_loader_close renvoie 1.

  11. #11
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Ton row[11], 32768 me paraît bien suspicieux. Les images stockées dans la base de données n'ont pas une taille constante quand même ? En fait, tu devrais commencer par écrire les données sur disque et vérifier que tu obtiens bien une image jpeg que tu arrives à lire avec un visionneur d'image. Ensuite tu peux débugger la deuxième partie de ton code

  12. #12
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    J'ai calculé la taille de l'image en byte que je veux afficher et ça a donné 32768 c juste pour essayer.
    J'ai essayé 64000 mais tjrs pas de résultat.
    Je vais essayé l'écriture sur disque.
    Merci

  13. #13
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Maintenant il me met GdkPixbuf_critical **: gdk_pixbu_loader_write: assertion 'loader != NULL' failed
    GdkPixbuf_critical **: gdk_pixbu_loader_close: assertion 'loader != NULL' failed
    GdkPixbuf_critical **: gdk_pixbu_loader_get_pixbuf: assertion 'loader != NULL' failed
    Je presume que le pixbufloader est null

  14. #14
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    C bon ça marche, il fallait mettre png à la place de jpeg. y a que les png qui marchent chez moi.Merci pour tout.

  15. #15
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Salut,
    Maintenant j'ai un problème coté mémoire, à chaque fois que je charge une image la mémoire occupé par mon executable augmente de 100k est ce qu'il y a une fonction gtk qui permet de libérer la mémoire occupée par le pixbufloader

  16. #16
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    g_object_unref (G_OBJECT (loader));
    Il faut peut être aussi que tu libères aussi les données que tu récupères via mysql (je sais pas comment fonctionnne l'API)

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 23/05/2013, 20h38
  2. Réponses: 1
    Dernier message: 31/08/2009, 22h48
  3. [XL-2003] Chercher une image sur le pc et l'afficher dans une USF
    Par bob651 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/07/2009, 23h42
  4. Réponses: 1
    Dernier message: 05/09/2007, 12h47
  5. Nomer une liste a partir d'un nom pris dans une liste
    Par leau2001 dans le forum Général Python
    Réponses: 2
    Dernier message: 22/05/2006, 11h51

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