Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SELECTEUR DE COULEURS


Information sur la source

Catégorie :Astuces Classé sous : rgb, couleur, selecteur, dégradé Niveau : Débutant Date de création : 01/12/2005 Date de mise à jour : 02/12/2005 22:18:34 Vu : 11 374

Note :
9,33 / 10 - par 3 personnes
9,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
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

  • 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
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
 

Historique

02 décembre 2005 22:18:35 :
optimisation

Commentaires et avis

signaler à un administrateur
Commentaire de Zova le 02/12/2005 14:06:21

Très bien fait, je regrette seulement le temps d'exécution, et aussi dans la fenêtre @wait : rajoute un "s" à dessin ;)

signaler à un administrateur
Commentaire de fjxokt le 03/12/2005 11:26:46

Pour la faute d'ortho, tu as du rever puisque j'avais bien écrit 'DESSIN' ;-)
Sinon pour le temps d'execution, c'est vrai que c'est long mais il sera difficile de faire plus rapide (toujours le même probleme puisque je dessine 310^2 pixels en faisant un calcul pour chacun d'entre eux)
Pour info, je met 1min11 pour dessiner la palette claire et 1min04 pour la sombre (j'ai un peu optimisé les calculs avecl'update), mais bon dès qu'elle est déssinée, on est tranquille jusqu'à ce que quelqu'un efface l'image ;-)
Si je pouvais savoir le tps que ça a mis chez ceux qui ont testé...

signaler à un administrateur
Commentaire de COOLMAN002 le 03/12/2005 12:49:47

Palette claire dessinée en 55secs

Palette sombre dessinée en 44secs

signaler à un administrateur
Commentaire de wims le 03/12/2005 13:24:43

Tu pourrais dessiner la palette avec un on load histoire de gagner du temps

signaler à un administrateur
Commentaire de fjxokt le 03/12/2005 13:32:00

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 ;-)

signaler à un administrateur
Commentaire de Zova le 04/12/2005 20:02:57

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)

signaler à un administrateur
Commentaire de fjxokt le 07/12/2005 22:50:39

merci ;-)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Couleur en rgb [ par kishkaya ] Est il possible de mettre une couleur definie par des valeur rgb genre $rgb(1,2,5) plutot que 12,0 a un texte ??_Marikou $rgb [ par Fat4L ] Bonjour/bonsoir, j'ai un petit soucis, je m'explique:  Dans mon script personnel je voulais facilité le changement de couleur ("thème") de mon script Couleur RGB [ par scandalz ] Bonjour, je cherche exactement la combine rgb de la couleur violet foncé celle qui correspond à ctrl + K 6, Je voudrai savoir le rgb exact.sccandalz Code couleur [ par l1solent ] on ^1:text:**:#:{ haltdef | var %temp.param = $nick $+ , $+ $chan | if ( $+ $color(background) isin $1-) { echo $chan &lt; $+  $+ $nick(#,$nick).co changer la couleur d'une boite de dialog [ par J4Gu4R ] voila j'essaye depuis plusieurs jours de trouver comment changer la couleur d'une boite de dialog et ce qui est écrit dedansen gro voila mon dialog :t detection [ par DaFtOu ] bonjour je voudrais faire un remote pour detecter quand quelqu'un ecrit avec la meme couleur que la couleur de fond de l'ecritureexemple:[18:26] &lt;J couleurs [ par yo252yo ] Bon j'ai cherché, et même si ca parait con pour vous je suis débutant.Je personalise WQuizz et j'aimerai savoir comment on fait pour mettre de la cou Aide pour un bot irc [ par Ziploc ] J'ai un problème , j'aimerais que mon bot réagisse sur un message en couleur mais j'ensuis incapable , j'ai sa ~~&gt;On *:text:*test*:#:{ /msg $chan s DEMANDE [ par Soprano71 ] bonjour quelqu'n aurai t'il un addons pour mettre le pseudo que je hl d'une couleur differente que la couleur de mon ecriture ?? Dialog [ par Doudis ] Bonjour j'ai rencontrer un petit probleme avec un dialog j'ai mit en couleur le texte du dialog avec mdx mais je voudrais savoir comment le faire pour


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,437 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.