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

Scheme Discussion :

[GIMP] Couleur dépendant d'une variable


Sujet :

Scheme

  1. #1
    Nouveau membre du Club
    [GIMP] Couleur dépendant d'une variable
    Bonjour,
    En essayant quelque trucs en script-fu, je suis tombé face à un problème que je ne comprend pas du tout...

    Si dans la console j’écris :
    [code] (gimp-context-set-background '(0 0 0)) [\code]
    La couleur d'arrière plan deviens noire : logique.

    Par contre :
    [code] (let* ((a 0)) (gimp-context-set-background '(a 0 0))) [\code]
    La couleur d'arrière plan est mise à rouge... (ce qui veut dire qu'elle est mise à 255 0 0)

    J'ai fait plusieurs test : pour déclarer une couleur, les variables valent toujours 255.

    Quelqu'un pour m'expliquer ? Comment mettre une couleur dépendant d'une variable ?

    Merci

  2. #2
    Membre actif
    Je suppose que ça se passe à cause de l'apostrophe, alors que (list a 0 0) et `(,a 0 0) doivent marcher. La version '(a 0 0) fournit un symbole comme la quantité du rouge, ce qui semble un erreur per se. Cependent, je n'ai pas pu le tester. C'etait ma première expérience avec la console de gimp, et même la première command n'a pas donné de resultats observables.

  3. #3
    Expert confirmé
    Citation Envoyé par Sayanel01 Voir le message
    Si dans la console j’écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     (gimp-context-set-background '(0 0 0))
    La couleur d'arrière plan deviens noire : logique.

    Par contre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      (let* ((a 0)) (gimp-context-set-background '(a 0 0)))
    La couleur d'arrière plan est mise à rouge... (ce qui veut dire qu'elle est mise à 255 0 0)
    Petites remarques:
    * Sur ce forum, les balises de fermeture s'écrivent avec un slash (barre oblique) et non un backslash (barre oblique inversée?).
    * Dans ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      (let* ((a 0)) (gimp-context-set-background '(a 0 0)))
    il n'est pas utile d'utiliser "let*" car tu as une seule variable.

    * la liste '(a 0 0) est une liste qui contient 3 éléments: le symbole a, le nombre 0 et le nombre 0.
    Ce que fait gimp-context-set-background, lorsqu'on lui passe autre chose que des nombres n'est probablement pas bien déterminé.
    Normalement, si c'était bien fait, il devrait produire une erreur du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gimp-context-set-background: l'argument n'est pas un nombre: a
    Manifestement, d'après ce que tu observes, il a plutôt tendance à mettre 255.

    * En fait, tu veux plutôt une liste avec la valeur du symbole a et non le symbole a lui-même, suivi du nombre 0 et du nombre 0.
    Le plus simple, c'est de l'exprimer exactement de la manière que je viens de dire!
    Ce qui donne: (list a 0 0), et qui se lit: "une liste contenant la valeur de la variable a, suivie de 0 et de 0.".

    * La solution `(,a 0 0) proposée par byjav est une écriture raccourcie de (list a 0 0) et qui se lit également "une liste avec la valeur de la variable a, suivie de 0 et de 0.".

    * de manière plus générale, tu peux donc écrire, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (let ((r 0) (g 127) (b 255)) (gimp-context-set-background (list a b c)))
    * Par contre, il faut utiliser "let*" si tu veux écrire quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (let* ((r 0) (g (+ r 64)) (b (+ b 64))) (gimp-context-set-background (list a b c)))

  4. #4
    Nouveau membre du Club
    ... ...
    Tout s’éclaircit

    D'accord, merci ! Il semblerait que beaucoup de problèmes se résolvent pour moi

    Au passage, j'ai appris le scheme avec le tuto gimp.org : de http://docs.gimp.org/fr/gimp-using-s...st-script.html
    Assez clair, mais loin d'être exhaustif. Connaitriez-vous d'autres documentation plus complètes ?

    Merci !