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

Caml Discussion :

Transformation des pixels Je bloque


Sujet :

Caml

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Transformation des pixels Je bloque
    salut,

    je bloque sur 1 question de prog :

    Il s'agit en fait de définir une fonction transforme : (color -> int*int*int) -> unit qui prend en paramètre une fonction de transformation des pixels f et qui applique cette transformation a tous les pixels de la fenetre graphique.
    Vous devez recuperer dans un image toute la fenetre graphique, puis convertir cette image en une matrice de couleur, puis appliquer la transformation aux pixels de cette matrice, puis convertir le resultat en une image et enfin l’afficher.

    Test : Arrangez vous pour avoir une fenetre graphique ouverte avec une image affichee en son centre puis essayez
    par exemple :
    transforme(engris)
    transforme(luminosite(30))
    transforme(contraste(0.5))

    Eclairer moi
    Mci

  2. #2
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Salut !

    Citation Envoyé par Hubert2
    je bloque sur 1 question de prog
    Montre-nous ce que tu as fait et dis-nous précisément ce qui bloque / ce que tu n'arrives pas à faire. C'est ainsi que l'on pourra t'aider.

    Cordialement,
    Cacophrène

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    justement je pige kedale alors j'aimerai des infos pr m'aider

  4. #4
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Salut !

    Bon voici un exemple. Essaie de comprendre le code et de le relier à ton énoncé. Et n'hésite pas à me poser des questions.

    Code ocaml : 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
    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
    (* La taille qui nous intéresse. *)
    let pixels_h = 600
    let pixels_w = 800
    
    (* La fonction (int -> int -> color -> unit) -> color array array -> unit
     * Elle est en fait plus générale que ça... mais c'est son utilisation ici. *)
    let apply f = Array.iteri (fun x -> Array.iteri (f x))
    
    (* La fonction de transformation. *)
    let grayscale x y c =
      (* Une couleur est donnée sous la forme 0xRRGGBB. On récupère ici les
       * composantes avec des opérations bit-à-bit (pas indispensable). *)
      let r = (c lsr 16) land 255 and g = (c lsr 8) land 255 and b = c land 255 in
      let mean = (r + g + b) / 3 in 
      Graphics.set_color (mean lsl 16 + mean lsl 8 + mean);
      Graphics.plot y x
    
    (* Crée une image. Cette fonction est (de toute évidence) assez lente.
     * On crée la matrice par la même occasion. *)
    let build_image () =
      let tbl = Array.init pixels_h (fun y ->
        Array.init pixels_w (fun x ->
          let clr = Graphics.rgb x (x * y) y in
          Graphics.set_color clr;
          Graphics.plot x y;
          clr
      )) in
      (* Mise à jour des tracés, en une seule fois. *)
      Graphics.synchronize ();
      tbl
    
    let _ =
      (* Créons une nouvelle fenêtre graphique. *)
      Graphics.open_graph "";
      (* Pas de synchronisation automatique entre le buffer en arrière-plan et la 
       * fenêtre, pour gagner un peu en vitesse d'exécution. *)
      Graphics.auto_synchronize false;
      (* Dessinons une image, dont on récupère la matrice. *)
      let tbl = build_image () in
      (* Attendre une action avant de continuer. *)
      ignore (Graphics.wait_next_event [Graphics.Button_down]);
      apply grayscale tbl;
      Graphics.synchronize ();
      (* Attendre une action pour quitter... *)
      ignore (Graphics.wait_next_event [Graphics.Button_down])

    NB : Ce code ne fait pas exactement ce que te demande l'énoncé. Mais il peut servir de point de départ pour trouver la solution.

    Cordialement,
    Cacophrène

Discussions similaires

  1. Transformer des pixels blancs en pixels transparents
    Par michaeljeru dans le forum 2D
    Réponses: 1
    Dernier message: 11/03/2012, 11h35
  2. [Google Maps] transformer des pixels en distance
    Par och92 dans le forum APIs Google
    Réponses: 2
    Dernier message: 11/08/2011, 18h43
  3. Réponses: 7
    Dernier message: 08/02/2010, 23h02
  4. [OPENOFFICE] Transformation des tableaux OOo en HTML
    Par GrandFather dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 15/05/2004, 19h00
  5. Réponses: 2
    Dernier message: 30/05/2002, 11h19

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