bitmap

 

bitmap - Image affichant deux couleurs


SYNTAXE

 image create bitmap ?nom? ?options?

DESCRIPTION


Un bitmap est une image dont les pixels ne peuvent prendre que deux couleurs ou être transparents. Une image Bitmap est définie par quatre choses : la couleur du fond, la couleur du premier plan, et deux bitmaps appelés la source et le masque. A chaque bitmap est associé un tableau rectangulaire composé de 0 et de 1, les deux bitmaps doivent avoir les mêmes dimensions. Pour les pixels dont la valeur de masque est nulle, l'image n'affiche rien du tout, produisant ainsi un effet de transparence. Pour les autres pixels, l'image affiche la couleur du premier plan si la valeur du pixel du bitmap source correspondant est 1. Si cette valeur est nulle, la couleur du fond est affichée.


CRÉER UN BITMAP


Comme toutes les images, les bitmaps sont créés en utilisant la commande image. Les options suivantes, sont acceptées :

-background couleur Spécifie la couleur du fond de l'image. La couleur peut être indiquée dans n'importe laquelle des notations acceptées par Tk. Si la valeur est une chaîne vide alors les pixels du fond seront transparents. Dans ce cas les valeurs de -maskdata et -maskfile sont ignorées.

-data chaîne de caractères Spécifie le contenu d'une source bitmap par une chaîne de caractères. Le format de la chaîne est le format défini par la norme bitmap X11 (i.e., tel qu'il est généré par le programme bitmap). Si les deux options -data et -file sont spécifiées, l'option -data a la priorité.

-file nom La valeur nom est le nom d'un fichier définissant la source du bitmap. Le format de ce fichier est le format défini par la norme bitmap X11 (i.e., tel qu'il est généré par le programe bitmap)

-foreground couleur Définit la valeur du fond de l'image. La couleur peut être indiquée dans n'importe laquelle des notations acceptées par Tk.

-maskdata chaîne de caractères Spécifie le contenu d'un masque par une chaîne de caractères. Le format de la chaîne est le format défini par la norme bitmap X11 (i.e., tel qu'il est généré par le programme bitmap). Si les deux options -maskdata et -maskfile sont spécifiées, l'option -maskdata a la priorité.

-maskfile nom La valeur nom est le nom d'un fichier définissant le masque du bitmap. Le format de ce fichier est le format défini par la norme bitmap X11 (i.e., tel qu'il est généré par le programme bitmap).


COMMANDES ASSOCIÉES A UNE IMAGE


Dès qu'un bitmap est créé, Tk crée aussi une nouvelle commande de même nom que l'image. Cette commande peut être appelée pour réaliser des actions sur l'image. La syntaxe est de la forme :

 ''nom_de_l'image option ''?''arg arg ...''?

Les valeurs affectées aux Option et aux arg détermine le comportement de la commande. Pour les images bitmap, les commandes suivantes sont possibles :

nom_de_l'image cget option Retourne la valeur courante de Option. Option est n'importe laquelle des options couramment acceptées par la commande image create bitmap.

nom_de_l'image configure ?option? ?valeur option valeur ...? Interroge ou modifie la valeur des options de l'image. Si aucune option n'est spécifiée, la liste de toutes les options possibles, est retournée (voir ConfigWidg pour connaître le format de cette liste). Si option est donnée sans aucune valeur associée, alors la commande retourne une liste décrivant cette option (cette liste est identique à la sous-liste correspondante à l'option, de la liste retournée si aucune option n'est spécifiée). Si une ou plusieurs paires option-valeur sont spécifiées, alors la commande affecte les nouvelles valeurs aux options correspondantes ; dans ce cas la commande retourne une chaîne vide. Option est n'importe laquelle des options acceptées par la commande image create bitmap.


Format bitmap de X

Voici un exemple de ce fameux format :

  set data1 \
    "#define image_width 7
     #define image_height 4
     static unsigned char image_bits[] = { 0x08, 0x1c, 0x3e, 0x7f};"
  1. Le texte est du code C
  2. Le mot "image" peut être remplacé par le mot que vous voulez (qui respecte les conventions des noms C)
  3. L'image est fournie par une suite de nombres hexadécimaux qui doivent respecter des règles :

Reprenons l'exemple ci-dessus :

  0x08 -> 0b00001000 -> ligne 1, dans le dernier nombre les 7 bits de droite : 0001000
  0x1c -> 0b00011100 -> ligne 2, dans le dernier nombre les 7 bits de droite : 0011100
  0x3e -> 0b00111110 -> ligne 3, dans le dernier nombre les 7 bits de droite : 0111110
  0x7f -> 0b01111111 -> ligne 4, dans le dernier nombre les 7 bits de droite : 1111111

Petit script pour ceux qui récupère une chaîne de bits :

  #0001000
  #0011100
  #0111110
  #1111111
  # ->
  #0001000001110001111101111111
  # ->
  #0x08, 0x1c, 0x3e, 0x7f
  set width 7
  set height 4
  # chaîne binaire transformée en chaîne de caractères
  set b \x10\x71\xf7\xf0
  binary scan $b B* str
  set str [string range $str 0 [expr {$width * $height - 1}]]
  # 001000111011111
  # tronçonnage
  set liste [list]
  set w1 [expr {$width - 1}]
  set w2 [expr {($width + 7) / 8}]
  for {set i 0} {$i < $height} {incr i} \
  {
    set row [string range $str 0 $w1]
    set str [string range $str $width end]
    for {set j 0} {$j < $w2} {incr j} \
    {
      set b [string range $row 0 7]
      set row [string range $row 8 end]
      binary scan [binary format b* $b] H* hex
      lappend liste 0x$hex
    }
  }
  set data ""
  append data "#define image_width $width\n"
  append data "#define image_height $height\n"
  append data "static unsigned char image_bits[] = { [join $liste ", "] };"

  package require Tk
  grid [label .b -image [image create bitmap -data $data]]

Traduit par Michel Salvagniac 2002-2003

Copyright © 2003 - Le Wiki Tcl/Tk Francophone.


Catégorie Manuel Tcl/Tk