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+ Discussion :

[gtkmm] Afficher une image issue de cairomm


Sujet :

GTK+

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Par défaut [gtkmm] Afficher une image issue de cairomm
    B'jour /b'soir ,

    Voilà j'ai besoin pour un projet d'afficher une image générée par cairomm.
    L'image est parfaitement générée et je peux la stocker dans un fichier.
    J'aurai besoin d'afficher cette image dans un composant gtkmm.
    Je dois donc passer cette image en paramètre à un composant mais je ne sais pas sous quelle forme et c'est bien là mon problème.
    Il y a bien la solution de stocker l'image du coté de cairomm et de ensuite la relire du cote de gtkmm mais cette solution m'enchante peu.
    J'ai vu que cairomm pouvait stocker une ImageSurface sous forme d'un tableau de caractère non signé et que du côté de Gdk on pouvait créer une Bitmap à partir d'un tableau de caractère signé , j'ai presque la solution , reste un problème de signe
    Si quelqu'un a une solution à mon problème je suis preneur. , j'ai presque la solution , reste un problème de signe
    Si quelqu'un a une solution à mon problème je suis preneur.

  2. #2
    Membre Expert
    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
    Par défaut
    gtk utilise cairo depuis gtk 2.8, et il ya des fonctions poru faire interagir les 2, j'ai pas trouvé de fonction magique pour faire exactement ce que tu veux (et je suis pas suffisamment doué en cairo pour ça), mais à mon avis en fouillant un peu tu devrait pouvoir trouver ton bonheur

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Par défaut
    Citation Envoyé par teuf13
    gtk utilise cairo depuis gtk 2.8, ...
    gtk ou gtkmm ? Parce que ce qui m'intéresse c'est gtkmm.
    M'enfin je vais chercher dans la doc gtkmm , merci !

  4. #4
    Membre Expert
    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
    Par défaut
    gtkmm c'est un binding "au dessus" de gtk+, ie qui utilise gtk+, donc si gtk+ utilise cairo, gtkmm utilise aussi cairo

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Par défaut
    D'accord je vois merci.

    J'ai effectivement trouvé la réponse.
    Gdk::Window hérite de Gdk:rawable et dans cette classe il existe une méthode create_cairo_context
    La répons était simple mais fallait la trouver.

    Par contre , j'ai un problème d'execution.
    La compiliation marche nickel mais j'ai ça à l'execution :
    2. unkown function
    [0xb7eff420]

    3. /usr/lib/libgdkmm-2.4.so.1
    Gdk:rawable::create_cairo_context() +0x12) [0xb75d9642]
    J'ai un affichage de la liste des signaux grace à un outil qui n'a pas été développé par moi donc je ne saurai vous expliquer comment j'ai ce message.
    Bref , quelqu'un sait pourquoi mon programme ne connait cette fonction ?

    Pourtant j'ai gtkmm 2.10.10

  6. #6
    Membre Expert
    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
    Par défaut
    La fonction doit être trouvée, sinon ça raterait à l'édition de lien (sauf si tu fais des dlopen ou des joyeusetés du genre). Pour le msg que tu obtiens, c'est chaud d'interpréter la sortie d'un outil complètement inconnu à la fonctionnalité indéterminée...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Par défaut
    En fait , l'erreur était simple à comprendre , je faisais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mGtk->mView.cg = get_window()->create_cairo_context();
    Mais seulement get_window() me renvoyé NULL donc forcément NULL n'a pas de méthode create_cairo_context()

    M'enfin , je vois l'erreur mais je sais pas la résoudre , j'explique plus en détail.

    Je dois développer plusieurs classes , la première s'appelle Level et hérite d'une classe Plugin ( inconnue pour moi ) qui est en fait une Vbox.
    La classe Level comporte comme attribut un CairoLevel qui est en fait une classe qui se chargera de généré du code Cairo sur un context cairo.
    Il ne doit apparaitre aucun code Gtkmm dans les classes Level et CairoLevel , pour l'instant tout ça j'ai.
    Ensuite il y'a une classe GtkLevel qui elle est une sous classe de Level. Dans cette classe je peux avoir du gtkmm.
    Cette classe GtkLevel comporte un attribut dérivé de Gtk:rawingArea ( LevelDrawingArea ) . Dans ce LevelDrawingArea j'aimerai afficher le cairo généré par ma cairolevel.

    Un petit schéma , les flèches représente l'héritage :

    Plugin <--- Level ( avec un CairoLevel ) <--- GtkLevel ( avec un LevelDrawingArea)

    Ce que je fais c'est que dans GtkLevel , j'insère ma DrawingArea dans Plugin ( qui est une Vbox je le rappelle ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pack_start(Lda, true, true);
    Puis j'appelle une méthode de LevelDrawingArea qui se charge d'envoyer le context cairo à CairoLevel pour qu'il puisse écrire dedans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    wnd = get_window();
    if ( not wnd ){
    	std::cout << "ERREUR LevelDrawingArea : wnd NULL\n";
    	//exit(0);
    	return;
    }
    mGtk->mView.cg = wnd->create_cairo_context();// envoies le context cairo a CairoLevel
    Seulement voilà , get_window me renvoit Null et je ne vois pas pourquoi.
    Vu que je fais un pack_start() , get_window devrait renvoyé la gdk::window associé à la Vbox mais non
    Si quelqu'un peut m'aider la-dessus ...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Par défaut
    J'ai quelque chose , peut être pas mieux mais j'ai quelque chose !
    A la place de j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wnd = get_root_window();
    Et wnd vaut quelque chose !
    Par contre , j'ai toujours rien qui s'affiche dans ma fenêtre :/
    Donc je sais pas si j'ai un pointeur vers la bonne gdk:Window , pourtant c'est la seule fenêtre qui s'ouvre dans mon programme

  9. #9
    Membre Expert
    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
    Par défaut
    Tu tentes de récupérer ton pointeur avant le premier affichage de la drawing area ? Y a moyen que la GdkWindow associée à un widget (si elle existe) ne soit crée que au moment où le widget est mappé ou réalisé (pour reprendre le nom des signaux associés), ton pb vient peut être du fait que tu fais ton get_window trop tôt ?

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Par défaut
    Je ne comprend pas tres bien ce que tu dis

    Dans le constructeur de mon GtkLevel j'ai ca :
    pack_start(Lda, true, true);
    Lda.init();
    Init() étant la méthode qui passe le context Cairo à CairoLevel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void LevelDrawingArea::init(){
    	wnd = get_root_window();
    	if ( wnd ){ 
    		std::cout <<"YEEAAAHHH \n\n";
    		mGtk->mView.cg = wnd->create_cairo_context();
    	}
    	else{			
    		std::cout << "ERREUR LevelDrawingArea : wnd NULL\n";
    		exit(0);
    		//return;
    	}
    }

  11. #11
    Membre Expert
    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
    Par défaut
    Ce que je dis, c'est qu'il est possible que get_window() renvoie NULL (ie que la GdkWindow associée à la drawing area ne soit pas définie) quand la drawing area n'est pas affichée à l'écran et que c'est peut être ça la cause de ton get_window() qui renvoie NULL

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Par défaut
    L'erreur venait effectivement de là , j'ai donc bien utiliser get_window(), et j'ai crée mon context cairo un peu plus loin dans le code.
    Merci teuf13

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

Discussions similaires

  1. Afficher une image issue d'un BLOB
    Par amirou1939 dans le forum JSF
    Réponses: 0
    Dernier message: 18/04/2013, 12h05
  2. Afficher une image issue d'une requête SQL
    Par aygitci dans le forum Langage
    Réponses: 1
    Dernier message: 14/03/2007, 09h12
  3. [gtkmm] afficher une image
    Par momofiant dans le forum GTK+
    Réponses: 1
    Dernier message: 04/01/2007, 09h58
  4. Réponses: 2
    Dernier message: 04/02/2004, 22h32
  5. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 19h13

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