changer le sens d'une map

 

ulis, 2006-02-05. Une procédure pour changer le sens d'une map : dans le sens vertical ou dans le sens horizontal.


Pourquoi

Pour manipuler facilement les maps.


Comment

En appliquant une symétrie sur le tableau des indices de luminosité.


Utilisation

Pour des maps

  mirror orientation [map]...
  # orientation:
  #  -vertical: exchange top & bottom.
  #  -horizontal: exchange left & right.
  # map: a map

Pour un fichier

  mirror orientation file
  # orientation:
  #  -vertical: exchange top & bottom.
  #  -horizontal: exchange left & right.
  # file: file name

La procédure

  # mirror

  proc mirror {orient args} \
  {
    if {![string match {-[vh]*} $orient]} \
    { error "mirror: bad orientation '$orient'" }
    foreach map $args \
    {
      set file ""
      if {[llength $map] == 1} \
      {
        set file $map
        set map [file2map $map]
      }
      set map2 [list]
      switch -glob -- $orient \
      {
        -v* \
        {
          foreach line [lrange $map 1 end] \
          { set map2 [linsert $map2 0 $line] }
        }
        -h* \
        {
          foreach line [lrange $map 1 end] \
          {
            set line2 ""
            foreach pix [split $line {}] \
            { set line2 $pix$line2 }
            lappend map2 $line2
          }
        }
      }
      set map2 [linsert $map2 0 [lindex $map 0]]
      if {$file != ""} { map2file $map2 $file } \
      else { return $map2 }
    }
  }

Démo

    set mapv \
    {
      0f
      0444444444440
      4eeeeeeeeeee4
      4eeeeeeeeeee4
      4ddddddddfdd4
      4dddddddffdd4
      4ccccccffccc4
      4bfffbbffbbb4
      4bbfffbffbbb4
      4aaaffffaaaa4
      4aaaffffaaaa4
      4999ffff99994
      4999999999994
      0444444444440
    }
    set maph \
    {
      0f
      0444444444444440
      4eeeeeeeeeeeeee4
      4eeeeeeeeeeeeee4
      4dddddddddddddd4
      4dddddddddddddd4
      4ccccccccffcccc4
      4ccccccffffcccc4
      4ccccffffffcccc4
      4bbbbffffffbbbb4
      4bbbbbbffffbbbb4
      4bbbbbbbbffbbbb4
      4aaaaaaaaaaaaaa4
      4aaaaaaaaaaaaaa4
      4999999999999994
      4999999999999994
      0444444444444440
    }
    wm title . mirror
    frame .v
    frame .h
    label .v.l -image [map2img $mapv white #484]
    pack .v.l -side left -padx 20
    label .v.m -image [map2img [mirror -v $mapv] white #484]
    pack .v.m -side left -padx 20
    label .h.l -image [map2img $maph white #484]
    pack .h.l -side left -padx 20
    label .h.m -image [map2img [mirror -h $maph] white #484]
    pack .h.m -side left -padx 20
    pack .v .h -padx 50 -pady 10

Voir aussi


Discussion


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