Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > Caml
Caml Forum d'entraide sur la programmation avec les langages fonctionnels Caml-Light et OCaml
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 03/11/2012, 03h37   #1
Engu'
Invité de passage
 
Homme
Étudiant
Inscription : 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.
Engu' est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2012, 11h43   #2
gasche
Membre Expert
 
Inscription : avril 2007
Messages : 829
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 829
Points : 1 007
Points : 1 007
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.
gasche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2012, 11h44   #3
gasche
Membre Expert
 
Inscription : avril 2007
Messages : 829
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 829
Points : 1 007
Points : 1 007
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 !
gasche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2012, 14h30   #4
Engu'
Invité de passage
 
Homme
Étudiant
Inscription : 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
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
Engu' est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 23h52.


 
 
 
 
Partenaires

Hébergement Web