Selecteur de couleurs

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 618 fois - Téléchargée 25 fois

Contenu du snippet

Tout d'abord sachez que je poste ce code à titre d'exemple
Il DESSINE un dégradé comme ceux que l'on peut trouver dans les logiciels de retourche d'images, une partie servant à selectionner la couleur, l'autre à selectionner la luminosité pour cette même couleur
Enfin les valeurs rgb ou html peuvent être copiés
Je rapelle que j'ai posté ce code car la plupart (tous ?) des selecteurs de couleurs sont fait soit a l'aide de scrollbars faisant varier les composantes R,G et B, soit d'image de dégradé
Dernière chose, le dégradé n'est effectué qu'une seule fois, puis il est sauvegardé de manière a ne pas avoir a le redessiner à chaque fois !

Source / Exemple :


alias palette {
  window -dopCk0 @palette -1 -1 390 420
  window -hp @pbuf
  if (!$exists($scriptdirpalette_claire.bmp)) draw_palette claire
  else { drawpic @palette 0 0 $+(",$scriptdirpalette_claire.bmp,") | drawcopy @palette 0 0 310 310 @pbuf 0 0 }
  lumdeg 255 | draw_infos 1 1 | fleche 1
}

alias draw_palette {
  var %f $+(",$scriptdirpalette,_,$1,.bmp,")
  if ($exists(%f)) drawpic @palette 0 0 %f
  else {
    var %x 1 , %r 255 , %g 0 , %b 0 , %ticks $ticks
    wait
    while (%x < 310) {
      var %y 1
      while (%y < 310) {
        if ($1 == claire) drawdot -rn @palette $rgb($calc($l(%r) + (((255 - %r) / 310) * %y)),$calc($l(%g) + (((255 - %g) / 310) * %y)),$calc($l(%b) + (((255 - %b) / 310) * %y))) 1 %x %y
        else { 
          var %c $calc(%y * 255 / 310)
          drawdot -rn @palette $rgb($l($calc(%r - %c)),$l($calc(%g - %c)),$l($calc(%b - %c))) 1 %x %y
        }
        inc %y
      }
      if (%r >= 255) && (!%b) && (%g < 255) inc %g 5
      elseif (%g <= 255) && (%r > 0) && (!%b) dec %r 5
      elseif (%r <= 0) && (%g >= 255) && (%b < 256) inc %b 5
      elseif (%b >= 255) && (%r <= 0) && (%g > 0) dec %g 5
      elseif (%g <= 0) && (%b > 254) && (%r < 255) inc %r 5
      elseif (%r >= 255) && (%g <= 0) dec %b 5
      inc %x
    }
    drawdot @palette
    drawsave @palette %f
    wait
    echo -a Palette $1 dessinée en $duration($calc(($ticks - %ticks) / 1000)))
  }
  lumdeg 255 | draw_infos 1 1 | fleche 1
  drawcopy @palette 0 0 310 310 @pbuf 0 0 
}

alias -l lumdeg {
  tokenize 44 $rgb($1)
  var %i 1 | while (%i < 310) {
    if ($getdot(@palette,1,309) > 50000) drawrect -frn @palette $rgb($l($calc($1 - (($1 / 310) * %i))),$l($calc($2 - (($2 / 310) * %i))),$l($calc($3 - (($3 / 310) * %i)))) 1 340 %i 20 1
    else drawrect -frn @palette $rgb($l($calc($1 + (((255 - $1) / 310) * %i))),$l($calc($2 + (((255 - $2) / 310) * %i))),$l($calc($3 + (((255 - $3) / 310) * %i)))) 1 340 %i 20 1
    inc %i
  }
  drawdot @palette
}

menu @palette {
  sclick {
    if ($inrect($mouse.x,$mouse.y,1,1,309,309)) {
      drawcopy @pbuf 0 0 310 310 @palette 0 0 310 310 
      draw_infos $mouse.x $mouse.y | fleche 1
      lumdeg $getdot(@palette,$mouse.x,$mouse.y)
      drawrect -e @palette $iif($getdot(@palette,1,309) > 50000,1,0) 2 $calc($mouse.x - 6) $calc($mouse.y - 6) 11 11
    }
    elseif ($inrect($mouse.x,$mouse.y,340,1,20,309)) { fleche $mouse.y | draw_infos $mouse.x $mouse.y }
  }
  Degradé sombre:draw_palette sombre
  Dégradé clair:draw_palette claire
  -
  Copier
  .code RGB:clipboard $rgb($getdot(@palette,2,340))
  .code HTML:clipboard $html($rgb($getdot(@palette,2,340)))
}

alias -l draw_infos {
  drawrect -rf @palette $getdot(@palette,$1,$2) 1 1 320 120 60
  drawrect -f @palette 0 1 140 315 200 60
  drawtext -b @palette 1 0 arial 13 140 330 RGB: $rgb($getdot(@palette,$1,$2))
  drawtext -b @palette 1 0 arial 13 140 350 HTML: $html($rgb($getdot(@palette,$1,$2)))
}
alias -l html { tokenize 44 $1 | return $+($chr(35),$base($1,10,16,2),$base($2,10,16,2),$base($3,10,16,2)) }
alias -l fleche {
  drawrect -f @palette 0 1 330 1 10 320 360 1 10 320
  drawtext @palette 1 wingdings 10 330 $1 è | drawtext @palette 1 wingdings 10 359 $1 ç
}
alias -l wait { 
  if (!$window(@wait)) { window -pod @wait -1 -1 200 80 | drawtext @wait 1 arial 14 30 15 DESSIN EN COURS... }
  else close -@ @wait
}
alias -l l return $iif($1 < 0,0,$iif($1 > 255,255,$1))

on *:close:@palette:window -c @pbuf

Conclusion :


/palette pour l'utiliser

A voir également

Ajouter un commentaire

Commentaires

fjxokt
Messages postés
841
Date d'inscription
vendredi 28 janvier 2005
Statut
Membre
Dernière intervention
25 février 2009
-
merci ;-)
Zova
Messages postés
155
Date d'inscription
mardi 15 juin 2004
Statut
Membre
Dernière intervention
24 août 2010
-
fjxokt justement cette fenêtre d'attente je me suis trompé car je pensai que cette fenêtre d'attente était faite pour tous les dessins effectués sur la pwin alors que c'est juste pour la palette... autant pour moi. Je te souhaite en tout cas une très bonne continuation car j'aime bien ce que tu fait (en général :p)
fjxokt
Messages postés
841
Date d'inscription
vendredi 28 janvier 2005
Statut
Membre
Dernière intervention
25 février 2009
-
oula je suis lent moi :-(
Le problème wims c'est que si (imaginons) , quelqu'un supprime les images, comme le on load ne s'effectue qu'une fois, il y aura un petit problème, et puis ça ne change finalement pas grand chose ;-)
cs_wims
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1 -
Tu pourrais dessiner la palette avec un on load histoire de gagner du temps
COOLMAN002
Messages postés
976
Date d'inscription
lundi 16 juin 2003
Statut
Membre
Dernière intervention
1 juillet 2012
1 -
Palette claire dessinée en 55secs

Palette sombre dessinée en 44secs

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.