Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2011
    Messages : 3
    Points : 0
    Points
    0

    Par défaut Plantage du module Graphics

    Bonsoir à tous,
    pour un projet j'utilise le module Camlimages, mais je rencontre un problème que je mets en évidence dans le code ci-dessous.
    Pour celà, tout bêtement, je charge une image png, puis je l'affiche une centaine de fois, et j'obtiens une jolie erreur du module Graphics.
    Voici le code :
    Code :
    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
    #load "graphics.cma";;
    #use "topfind";;
    #load "camlimages/camlimages.cma";;
    #load "lablgtk2/lablgtk.cma";;
    #require "camlimages";;
    
    open Graphics;;
    open Images;;
    open Graphic_image;;
    
    let charge_image chemin =
    	let temp = Images.load chemin [] in
    		Graphic_image.array_of_image temp
    ;;
    
    let affiche_im im = 
      let temp = make_image im in
      Graphics.draw_image temp 0 0
    ;;
    
    let im = charge_image "/home/engu/tux.png";;
    
    for i = 0 to 100 do
    open_graph "";
    affiche_im im;
    close_graph ();
    done;;
    Ce qui me donne le message d'erreur :
    Code :
    1
    2
    3
     Exception:
    Graphics.Graphic_failure "Xlib error: BadPixmap (invalid Pixmap parameter)".
    Si je relance la boucle :
    Code :
    1
    2
      Exception: Graphics.Graphic_failure "fatal I/O error".
    Et cela fini par
    Code :
    1
    2
    3
    4
            ocamlrun: ../../src/xcb_io.c:528: _XAllocID: Assertion `ret != inval_id' failed.
    
    Process caml-toplevel abandon (core dumped)
    Ne sachant plus quoi faire, je m'en remets à vos aides et suggestions.
    Merci d'avance,
    Engu

    EDIT : Précision (il me semble) intéressante :
    - Si j'enlève "affiche_im im;" dans la boucle, le programme ne plante plus.
    - Si je supprime les "open_graph "";" et "close_graph ();" de la boucle et que j'ouvre le graph au préalable (la boucle ne contient plus que "affiche_im im;"), le programme ne plante plus.

  2. #2
    Membre Expert
    Inscrit en
    avril 2007
    Messages
    831
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 831
    Points : 1 130
    Points
    1 130

    Par défaut

    Est-ce que ça marche si tu boucles de 0 à 5 au lieu de 0 à 100 ?

    Visiblement ton système a des limitations bizarres sur le nombre de pixmap que X accepte d'allouer (ça ne semble pas être spécialement lié à Caml). Quel environnement (système d'exploitation, sa version, etc.) utilises-tu ?

    Je ne comprends pas pourquoi tu tiens à ouvrir et fermer la fenêtre graphique à l'intérieur de la boucle -- à quel besoin cela correspond-il ? Le faire à l'extérieur me semble naturel et résout ton problème de plantage.

  3. #3
    Membre Expert
    Inscrit en
    avril 2007
    Messages
    831
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 831
    Points : 1 130
    Points
    1 130

    Par défaut

    PS: visiblement des gens mieux informés ont discuté de ton problème plus en détail [sur progmod]. N'hésite pas à aller leur poser la question directement !

  4. #4
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2011
    Messages : 3
    Points : 0
    Points
    0

    Par défaut

    En réalité sortir le open_graph / close_graph ne résout pas tout à fait tout (pour ne risquer aucun bug il faut l'ouvrir / le fermer une seule fois). Finalement je fais un open_graph au tout début, un close_graph à la toute fin.
    Pour information, le programme a été lancé sous Ubuntu 12.04.
    Merci à toi

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •