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 :

GDK_IS_DRAWABLE (drawable)' failed. Dessin avec GTK


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Par défaut GDK_IS_DRAWABLE (drawable)' failed. Dessin avec GTK
    Bonjour à tous,

    TEST 1 :
    J'éssaye de déclarer un pixmap et de tracer un rectangle sur celui-ci. Or à l'exécution, le programme retourne l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (visu_detou:27739): Gdk-CRITICAL **: gdk_draw_rectangle: assertion `GDK_IS_DRAWABLE (drawable)' failed
    t_chemin_images : /home/julien/Edres-svn/tools/aaaImg/
    Voici le code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
              GdkPixmap *pix_masque;
    	  pix_masque  =  gdk_pixmap_new(ps_Struct->p_window,
    				400,
    				300,-1);
               GdkGC *gc;
               gc = gdk_gc_new(ps_Struct->p_image[i]->window);
               gdk_draw_rectangle(pix_masque, gc, TRUE,0,0,60,60);
    J'ai également éssayé de récuperer le pixbuf d'une image existante et tracer dessus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pix_masque = gtk_image_get_pixbuf(ps_Struct->p_image[i]);
    Voila, je pense que je n'ai pas encore compri très bien le mécanisme de dessin avec GTK, Merci de m'éclairer.



    TEST 2:

    Je met mon pix buf dans un pix map pour le manipuler effectuer un traitement.

    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
              // Chargement du pixbuf
               pix_buf = gtk_image_get_pixbuf(ps_Struct->p_image[i]);
     
               // Creation pixmap
        pix_map=gdk_pixmap_new(ps_Struct->p_window,
                                   gdk_pixbuf_get_width(pix_buf),
                                   gdk_pixbuf_get_height(pix_buf),
                                   gdk_visual_get_system()->depth);
     
        // Insertion du pixbuf dans le pixmap
        gdk_draw_pixbuf(pix_map, ps_Struct->p_window->style->fg_gc[GTK_WIDGET_STATE ( ps_Struct->p_window)],
                        pix_buf,0,0,0,0,
                        gdk_pixbuf_get_width(pix_buf),
                        gdk_pixbuf_get_height(pix_buf),
                        gdk_visual_get_system()->depth,0,0); 
     
    // Sauvegarde du pixbuf
      if( !gdk_pixbuf_save(pix_map, c_chemin_complet, "jpeg", (GError **) NULL, "quality", "100", NULL) )
    	{
                printf("Erreur save pixbuf\n");
            }
    Marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    (visu_detou:31537): Gdk-CRITICAL **: gdk_draw_pixbuf: assertion `GDK_IS_PIXBUF (pixbuf)' failed
     
    (visu_detou:31537): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed
     
    (visu_detou:31537): GLib-GObject-CRITICAL **: g_object_ref: assertion `G_IS_OBJECT (object)' failed
     
    (visu_detou:31537): Gdk-CRITICAL **: gdk_draw_pixbuf: assertion `GDK_IS_PIXBUF (pixbuf)' failed
    Julien.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 176
    Par défaut
    Bonjour, si je ne m'abuses ton programme fonctionne, c'est juste que tu as des warnings dans la console quand tu le lances.

    La raison est toujours la même, c'est que les arguments passés à tes fonctions n'ont pas le bon type par défaut. Il faut utiliser les conversions de type suivantes :

    Citation Envoyé par jijiz Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (visu_detou:27739): Gdk-CRITICAL **: gdk_draw_rectangle: assertion `GDK_IS_DRAWABLE (drawable)' failed
    t_chemin_images : /home/julien/Edres-svn/tools/aaaImg/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
               gdk_draw_rectangle(GDK_DRAWABLE(pix_masque), gc, TRUE,0,0,60,60);
    Et pour l'autre :

    Citation Envoyé par jijiz Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    (visu_detou:31537): Gdk-CRITICAL **: gdk_draw_pixbuf: assertion `GDK_IS_PIXBUF (pixbuf)' failed
     
    (visu_detou:31537): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed
     
    (visu_detou:31537): GLib-GObject-CRITICAL **: g_object_ref: assertion `G_IS_OBJECT (object)' failed
     
    (visu_detou:31537): Gdk-CRITICAL **: gdk_draw_pixbuf: assertion `GDK_IS_PIXBUF (pixbuf)' failed
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                 gdk_draw_pixbuf(GDK_PIXBUF(pix_map), ps_Struct->p_window->style->fg_gc[GTK_WIDGET_STATE ( ps_Struct->p_window)],
                        pix_buf,0,0,0,0,
                        gdk_pixbuf_get_width(pix_buf),
                        gdk_pixbuf_get_height(pix_buf),
                        gdk_visual_get_system()->depth,0,0);

    PS: pour les deux autres erreurs (ref & unref) il semble que tu n'ai pas posté la partie de ton code les concernant, mais la solution est la même : utiliser les casts G_OBJECT( ... ).

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    "ps_Struct->p_window". Cette fenêtre est-elle initialisée lorsque tu tentes de créer ton pixmap ?

    Attention lorsqu'on utilise les GdkPixbuf. Ne pas oublier que ces fonctions peuvent vous renvoyer NULL. Je conseille fortement, à des fins de debug, d'utiliser la fonction g_assert(); juste après l'initialisation d'un pixbuf. Ainsi vous aurez un joli plantage de votre soft mais vous saurez pourquoi.

Discussions similaires

  1. Dessiner avec wxWidgets
    Par SuperPat dans le forum wxWidgets
    Réponses: 5
    Dernier message: 24/02/2009, 00h06
  2. Réponses: 1
    Dernier message: 26/02/2005, 12h55
  3. [GTK]installer Dev-C++ avec gtk 1.2 ...
    Par vbcasimir dans le forum Dev-C++
    Réponses: 2
    Dernier message: 02/02/2004, 13h34

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