Selecteur de couleurs

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

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.