Publicité
+ Répondre à la discussion
Page 2 sur 2 PremièrePremière 12
Affichage des résultats 21 à 35 sur 35
  1. #21
    Invité de passage
    Inscrit en
    février 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : février 2010
    Messages : 27
    Points : 3
    Points
    3

    Par défaut

    J'ai tout désinstallé ocaml sur mon ordinateur.

    Je suis allé sur debian.org
    J'ai voulu installé ocaml-3.10.2
    Il me fallait ocaml-nox .
    Etc etc

    Au final j'ai installé tout ce qu'il m'a dit qu'il manquait (par paquets deb téléchargés sur le site)

    J'ai relancé le dec de camlimages
    Paquet : libcamlimages-ocaml
    Etat : La même version est déjà installée
    Donc Camlimages est installé (apparemment)

    Je lance donc Ocaml
    rlwrap ocaml
    -> ok
    rlwrap ocaml graphics.cma
    -> ok

    rlwrap ocaml graphics.cma camlimages.cma
    -> Cannot find file camlimages.cma.
    Je m'y prends mal ?

  2. #22
    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

    C'est simple *si* tu as installé findlib, dans debian c'est le paquet ocaml-findlib.

    Alors en toplevel, la commande suivante devrait marcher :

    Code :
    1
    2
    #use "topfind";;  (* active findlib dans le toplevel *)
    #require "camlimages";;
    Pour la compilation d'un fichier source, la commande que j'ai donnée avant (ocamlfind ocamlc -package camlimages -linkpkg ...) devrait convenir.

    Pourquoi télécharges-tu les paquets uns par uns au lieu d'utiliser apt-get pour les obtenir ?

  3. #23
    Invité de passage
    Inscrit en
    février 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : février 2010
    Messages : 27
    Points : 3
    Points
    3

    Par défaut

    Je ne suis pas passé par synaptics ou le terminal, car ca m'installait ocaml-3.10.0
    et camlimages2.2 nécessite 3.10.2.
    Donc une fois parti sur le site pour récupérer les .deb, je n'étais plus à 2 paquets prêts pour installer camlimages ^^


    La manip que tu me donnes c'est pour compiler et avoir un executable.
    Ce que je cherche à faire moi, c'est charger le fichier .ml à partir d'ocaml.
    à la fin seulement, compiler le tout.

    Etant donné que je perds du temps à apprendre la langage, j'aimerais gagné du temps à ne pas compiler à chaque fois : j'ai intégré le terminal dans gedit pour que j'aille plus vite.

  4. #24
    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

    Compiler un fichier Caml prend moins d'une seconde. Je ne pense pas qu'on puisse perdre du temps si on a les bons outils.

    La manipulation avec des # (des directives toplevel) est à faire dans le toplevel (ou interpréteur interactive, qui est sans doute ce que tu appelles "ocaml"), et permet d'y activer camlimages simplement.

  5. #25
    Invité de passage
    Inscrit en
    février 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : février 2010
    Messages : 27
    Points : 3
    Points
    3

    Par défaut C'est toujours moi ...

    Voici ce j'ai testé pour compiler (google):
    Sans aucune utilisation de camlimages
    ça fonctionne bien
    Code :
    ocamlc -I +labltk -o test labltk.cma graphics.cma nums.cma test.ml

    J'ai repris ce que tu m'avais donné :
    Code :
    ocamlfind ocamlc -o tes -package camlimages -linkpkg test.ml


    Et voilà ce que je pense devoir obtenir

    Code :
    ocamlfind ocamlc -I +labltk -o test labltk.cma graphics.cma nums.cma camlimages -linkpkg test.ml
    Mais le terminal me sort
    /usr/bin/ocamlc: don't know what to do with camlimages.
    Usage: ocamlc <options> <files>
    Options are:
    -a Build a library
    ...
    ...
    ...
    Je lui ai bien dit micro branché : "l'utiliser pour la compilation" mais ça ne semble pas fonction

    Dois-je utiliser camlimages pour qu'il me le compile, ou ce n'est pas nécessaire ?


    edit : les directives top level sont bien fonctionnelles et ce même sans "code camlimages"
    Y'a pas de souci, mais maintenant, je préfère quand même vérifier le plus basique -_-"

  6. #26
    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

    C'est `-package camlimages` et pas `camlimages` tout seul. Par ailleurs, plutôt que tout le bloc `-I +labltk labltk.cma`, tu peux sans doute mettre `-package labltk`. De même, `-package graphics` et `-package num` (num et pas nums) sont tes amis. Pour voir la liste des paquets que ocamlfind connaît, `ocamlfind list`.

  7. #27
    Invité de passage
    Inscrit en
    février 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : février 2010
    Messages : 27
    Points : 3
    Points
    3

    Par défaut

    Merci beaucoup je peux enfin compiler
    Code :
    ocamlfind ocamlc -o test -package camlimages -package labltk -package graphics -package num -linkpkg test.ml
    J'ai donc copié collé ton 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    (* charge une image quelconque (.jpg,.png... comme supporté par
       camlimages) vers une matrice de triplets (r,g,b) d'entiers :
       (int*int*int)*array*array *)
    let load_rgb_matrix name =
      let img = Images.load name [] in
      let gimg = Graphic_image.array_of_image img in
      let rgb color =
        let quot n = n mod 256, n / 256 in
        let b, rg = quot color in
        let g, r = quot rg in
        r, g, b
      in
      Array.map (Array.map rgb) gimg
    
    (* transforme une matrice de triplets (r,g,b) en une "image graphics"
       de type Graphics.image *)
    let to_graphics rgb_matrix =
      Graphics.make_image
        (Array.map
           (Array.map
              (fun (r, g, b) -> Graphics.rgb r g b))
           rgb_matrix)
    
    
    let map_matrix f matrix = Array.map (Array.map f) matrix
    
    let invert_colors = map_matrix
      (fun (r, g, b) -> (255-r, 255-g, 255-b))
    
    
    let () =
      (* charge l'image donnée en argument : "./test truc.png" *)
      let test = load_rgb_matrix Sys.argv.(1) in
      Graphics.open_graph " 800x600";
      (* dessine l'image une première fois *)
      Graphics.draw_image (to_graphics test) 0 0;
      ignore (Graphics.read_key ());
      (* dessine l'image avec les couleurs inversées *)
      Graphics.draw_image (to_graphics (invert_colors test)) 0 0;
      ignore (Graphics.read_key ());
      Graphics.close_graph ()

    Et à la compilation j'obtiens cette erreur
    Error while linking test.cmo: Reference to undefined global `Graphic_image'
    Une idée ?

  8. #28
    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

    Chez moi ça marche. Tu es sûr que tu n'as pas oublié `-linkpkg` ?

  9. #29
    Invité de passage
    Inscrit en
    février 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : février 2010
    Messages : 27
    Points : 3
    Points
    3

    Par défaut

    Oui j'ai bien rajouté '-linkpkg'

    Je viens de rajouter
    -package camlimages.graphics
    ça compile

    Mais quand je lance mon exécutable par ./test

    j'ai cette erreur
    Fatal error: exception Invalid_argument("index out of bounds")


    et en passant par le toplevel idem
    - camlimages : connait pas Graphics_image
    - camlimages.graphics : out of bound



    J'ai l'impression que si ca continue comme ça, c'est la première et dernière fois que je touche à un projet prêtant du OCaml

  10. #30
    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

    "Index out of bounds" c'est une erreur à l'exécution, pas à la compilation. Il y a un tableau dans le programme à qui on demande un élément qui n'est pas dans son domaine de définition. C'est Sys.argv.(1), qui prend le premier élément en ligne de commande (comme le précise un commentaire dans le code) : tu as oublié de passer un paramètre en ligne de commande en exécutant le programme.

    Ce serait dommage d'abandonner maintenant que tu as appris comment compiler un programme !

  11. #31
    Invité de passage
    Inscrit en
    février 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : février 2010
    Messages : 27
    Points : 3
    Points
    3

    Par défaut

    Génial.
    Merci beaucoup. Comme un abruti, j'ai modifié, tout content de moi, le commentaire : je n'avais pas lu la bonne ligne -_-"


    Pour sauvegarder, c'est

    Graphics.dump_image
    Images.save Mon_nom []

    Mais ça me parait trop simple,

  12. #32
    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

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    (*
      ocamlfind ocamlc -package graphics -package camlimages -linkpkg test.ml -o test
    *)
    
    (* charge une image quelconque (.jpg,.png... comme supporté par
       camlimages) vers une matrice de triplets (r,g,b) d'entiers :
       (int*int*int)*array*array *)
    let load_rgb_matrix name =
      let img = Images.load name [] in
      let gimg = Graphic_image.array_of_image img in
      let rgb color =
        let quot n = n mod 256, n / 256 in
        let b, rg = quot color in
        let g, r = quot rg in
        r, g, b
      in
      Array.map (Array.map rgb) gimg
    
    (* sauvegarde une image grpahics de type Graphics.image dans le
       fichier au format de son choix (.png, .jpg...) *)
    let save_image image file_name =
      let img = Images.Rgb24 (Graphic_image.image_of image) in
      Images.save file_name None [] img
    
    (* transforme une matrice de triplets (r,g,b) en une "image graphics"
       de type Graphics.image *)
    let to_graphics rgb_matrix =
      Graphics.make_image
        (Array.map
           (Array.map
              (fun (r, g, b) -> Graphics.rgb r g b))
           rgb_matrix)
    
    let map_matrix f matrix = Array.map (Array.map f) matrix
    
    let invert_colors = map_matrix
      (fun (r, g, b) -> (255-r, 255-g, 255-b))
    
    
    (* Utilisation : il faut donner deux noms de fichier en ligne de commande
         ./test truc.png machin.jpg
    *)
    let () =
      (* charge l'image donnée en premier argument : truc.png dans
         l'exemple *)
      let test = load_rgb_matrix Sys.argv.(1) in
      Graphics.open_graph " 800x600";
      (* dessine l'image une première fois *)
      Graphics.draw_image (to_graphics test) 0 0;
      ignore (Graphics.read_key ());
      (* dessine l'image avec les couleurs inversées *)
      let img = to_graphics (invert_colors test) in
      Graphics.draw_image img 0 0;
      ignore (Graphics.read_key ());
      save_image img Sys.argv.(2);
      (* écrit l'image inversée dans le fichier donné en second argument :
         machin.png dans l'exemple *)
      Graphics.close_graph ()

  13. #33
    Invité de passage
    Inscrit en
    février 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : février 2010
    Messages : 27
    Points : 3
    Points
    3

    Par défaut

    Merci. Je n'étais pas loin, c'est même plus simple.

    Là je bloquais sur l'utilisation en 2 temps:
    Premier temps Fonction 1
    - ouvrir image
    - tracer un rectangle dessus

    Deuxième temps, Fonction 2 différente de 1
    - enregistrer

    Dans enregistrer j'étais bloqué sur passer de pixels->image physique.
    J'utilisais dump_image au lieu de get_image.

    Graphics.make_image
    Matrice-> image
    Graphics.dump_image
    Image -> matrice

    Graphics.get_image
    "Découpe" une image
    Graphics.draw_image
    Dessine une image

    Merci beaucoup

  14. #34
    Invité de passage
    Femme Profil pro
    Formateur en informatique
    Inscrit en
    décembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : décembre 2012
    Messages : 11
    Points : 4
    Points
    4

    Par défaut récupérer les coordonnées de la position courante de la souris ?

    Bonjour,
    je veux stocker dans une liste les coordonnées de la position de la souris quand je la bouge,
    en fait ça me servira après à sélectionner une zone dans la fenêtre graphique .
    voici ce que j'ai fait ! :
    ( est-ce que je suis sensée utiliser mouse_motion ?!
    (*------------------------------------------------------------------------------------------------------*)
    let clic im =
    let l = ref [] in
    let i = ref 0 in
    open_sho im;
    let rec aux () =
    match read_key() with
    |'s' -> (*start *)
    begin
    let attends = Graphics.wait_next_event [ Button_down] in
    let abscisse = attends.mouse_x
    and ordonnee = attends.mouse_y
    in

    l := maj_liste !l (abscisse,ordonnee);

    while attends.button do
    abscisse = attends.mouse_x;
    ordonnee = attends.mouse_y;
    l := maj_liste !l (abscisse,ordonnee);

    i := !i+1;
    done;
    aux ();
    end;
    |'c' -> close_graph()
    |_ -> aux()
    in aux ();
    !l;;

  15. #35
    Invité de passage
    Femme Profil pro
    Formateur en informatique
    Inscrit en
    décembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : décembre 2012
    Messages : 11
    Points : 4
    Points
    4

    Par défaut [solution]

    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
    29
    30
    31
    32
    33
    let dessiner t im = 
      let rec loop t =
          (*    if !compteur = 0 then 
    	    Unix.sleep 5;*)
        let eve = wait_next_event [Mouse_motion;Key_pressed]
        in
        if eve.keypressed
        then 
          match eve.key with
    	|'b' -> set_color black; loop t
    	|'r' ->set_color red ; loop t
    	|'l' -> !liste_z 
    	|'c' ->
    	  begin  
    	    liste_z := [];
    	    clear_graph();
    	    show_im im;
    	    (* sleep 4; *)
    	    loop t;
    	  end
    	|_ -> loop t
        else 
          begin 
    	compteur := !compteur+1;
    	fill_circle (eve.mouse_x) (eve.mouse_y) t;
    	liste_z:= maj_liste !liste_z (eve.mouse_x, eve.mouse_y); 
    	loop t
          end	
      in 
      try loop t 
      with  Quit -> close_graph(); 
        !liste_z;;

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
  •