changer la luminosité d'une map

 

ulis, 2006-02-05. Une procédure pour changer la luminosité d'une map en l'éclaircissant ou en l'assombrissant.


Pourquoi

Pour manipuler facilement les maps.


Comment

En appliquant un incrément à chaque indice de luminosité.


Utilisation

Pour des maps

  relight delta [map]...
  # delta:
  #  +n: lighten n levels
  #  -n: darken n levels
  # map: a map

Pour un fichier

  relight delta file
  # delta:
  #  +n: lighten n levels
  #  -n: darken n levels
  # file: file name

La procédure

  # relight

  proc relight {delta args} \
  {
    if {![string match {[\-+][0-9]} $delta]} \
    { error "relight: bad increment '$delta'" }
    foreach map $args \
    {
      set file ""
      if {[llength $map] == 1} \
      {
        set file $map
        set map [file2map $map]
      }
      set map2 [list]
      foreach line $map \
      {
        set line2 ""
        foreach pix [split $line {}] \
        {
          set pix 0x$pix
          set v [expr {$pix + $delta}]
          if {$v > 15} { set v 15}
          if {$v < 0} { set v 0}
          append line2 [format %x $v]
        }
        lappend map2 $line2
      }
      if {$file != ""} { map2file $map2 $file } \
      else { return $map2 }
    }
  }

Démo

    wm title . relight
    . config -padx 80 -pady 10
    set n 0
    foreach delta {-2 -1 -0 +1 +2} \
    {
      label .$n -image [map2img [relight $delta $map] white #484]
      pack .$n -pady 2
      incr n
    }

Voir aussi


Discussion


Catégorie Exemple | Catégorie Traitement d'image