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 :

Comment passer du type "color" aux trois couleurs RGB ?


Sujet :

Caml

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 2
    Par défaut Comment passer du type "color" aux trois couleurs RGB ?
    Bonsoir,
    Je travaille actuellement sur des images, et j'ai récupéré un programme qui me rend la matrice de tous les pixels de mon image. Camllight me renvoie la matrice en typage color vect vect. Cependant pour mes programmes j'ai besoin des 3 couleurs RGB (pour avoir une matrice en (int*int*int) vect vect. Connaitriez-vous un programme permettant de le faire ?
    J'ai passé en revue pas mal de liens sur internet et d'aide à caml, mais je n'ai rien trouvé.
    Merci

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Par défaut
    Code caml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    let rgb_of_color rgb =
      let split_octet color = color / 256, color mod 256 in
      let rg, b = split_octet rgb in
      let r, g = split_octet rg in
      (r, g, b);;

  3. #3
    Membre Expert
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Par défaut
    Citation Envoyé par bluestorm Voir le message
    Code caml : Sélectionner tout - Visualiser dans une fenêtre à part
      let split_octet color = color / 256, color mod 256 in
    Horreur !!!

    Diviser par 256 ça revient à décaler à droite de 8 octets... plus simple et surtout plus propre ! Enfin, bluestorm...

  4. #4
    Membre émérite
    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
    Par défaut
    Bonjour,

    Citation Envoyé par IOCWT
    Diviser par 256 ça revient à décaler à droite de 8 octets
    8 bits, ce me semble.

    Peut-être quelque chose comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    let get_rgb x =
      let r = (x lsr 16) land 255 
      and g = (x lsr 8) land 255 
      and b = x land 255 in
      (r, g, b)
    Cordialement,
    Cacophrène

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Par défaut
    J'ai l'habitude que les débutants en Caml Light viennent d'une prépa ou d'une fac maths ou maths/info. Dans ce cadre, ils sont souvent familier avec l'idée de "base 256", beaucoup moins avec les opérations bits-à-bits. Je préfère écrire une fonction qui soit directement compréhensible.

    Quitte à faire du bit-à-bit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    let get_rgb x =
      let r = (x land 0xFF0000) lsr (2*8) in
      let g = (x land 0x00FF00) lsr (1*8) in 
      let b = (x land 0x0000FF) in
      (r, g, b)
     
    let get_rgb x =
      let octet n = (x lsr (8*n)) land 0x0000FF in
      (octet 2, octet 1, octet 0)

  6. #6
    Membre émérite
    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
    Par défaut
    Bonsoir,

    Citation Envoyé par bluestorm
    J'ai l'habitude que les débutants en Caml Light viennent d'une prépa ou d'une fac maths ou maths/info. Dans ce cadre, ils sont souvent familier avec l'idée de "base 256", beaucoup moins avec les opérations bits-à-bits
    Un prépa de base comprendra sans doute assez vite qu'il y a une histoire de puissances de 2 derrière, et que c'est un cas particulier qui peut être traité efficacement en informatique avec des opérations bit-à-bit. Cela dit, peut-être que ça ne l'intéressera pas... c'est possible. À titre personnel, j'ai fait de l'info pendant 2 trimestres seulement en prépa, j'étais plus embêté par des choses plus conceptuelles (comment résoudre le problème, organiser le code, le faire fonctionner convenablement, etc.).

    Cordialement,
    Cacophrène

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 2
    Par défaut
    Bonjour,
    Je suis en effet en prépa, et je comprends mieux le programme en base 256, même si j'essaye d'apprendre et comprendre les calculs bit-à-bit.
    Merci pour les programmes
    Cordialement
    Yoann

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

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