Gestion des icones

 

Kroc - 03 Juin 2004


POUR gérer les icônes avec Tcl (Tk en fait), nous allons utiliser un script écrit par Aaron Faupell qui fait maintenant partie de la Tklib : http://cvs.sourceforge.net/viewcvs.py/tcllib/tklib/modules/ico/

La méthode indiquée ici est la seule que j'ai trouvée qui fonctionne pour créer toutes les vues de l'icône d'un starpack pour windows.

Dans cette page, les lignes qui commencent par "%" indiquent des commandes entrées dans la console Tk (ou dans tkcon). Les lignes qui commencent par ">" sont les réponses de ces commandes.

On commence par "sourcer" icon.tcl, ensuite, nous allons travailler sur un fichier (exemple.ico ici) qui doit contenir au moins un icône windows valide.


Obtenir la liste des vues :

 % ::ico::IconStats exemple.ico ICO
 > {16 16 4} {32 32 4} {48 48 4} {16 16 8} {32 32 8} {48 48 8}

avec :

Cette réponse m'indique que le fichier avec lequel je vais travailler comporte 6 vues qui sont dans l'ordre :

N.B. Les profondeurs supportées sont : 1 bit = Noir et blanc, 4 bits = 16 couleurs, 8 bits = 256 couleurs, 24 bits = 16 millions de couleurs et 32 bits = couleurs vraies.


Pour récupérer une des vues :

 % ::ico::getIconImage exemple.ico ICO 2
 > image1

J'ai demandé la vue n°2 (en partant de 0) de mon icône, soit celle en 48x48 256 couleurs et la réponse m'indique qu'elle a été récupérée dans image1. Maintenant, image1 est accessible par Tk comme n'importe qu'elle image detype photo. Donc, je peux par exemple l'utiliser pour un bouton :

 % pack [button .b -image image1]

Pour enregistrer une vue :

Avec cette commande, on peut faire trois choses différentes :

a) Remplacer une vue dans un fichier .ico déjà existant.

On utilise comme source une image photo Tk, soit en provenance d'un autre icône, soit en provenance d'une image quelconque de la bonne taille, exemple :

 % ::ico::writeIcon exemple.ico ICO 2 4 image2

avec :

La commande ne retourne rien, sauf en cas d'erreur.

b) Ajouter une vue à un fichier .ico déjà existant. Même principe que ci-dessus, mais on spécifie un index qui n'existe pas encore :

 % ::ico::writeIcon exemple.ico ICO 6 24 image3

Là, j'ai utilisé image3 pour ajouter une vue 48x48 en 24 bits à mon icône. Je peux contrôler le résultat avec IconStats :

 % ::ico::IconStats exemple.ico ICO
 > {16 16 4} {32 32 4} {48 48 4} {16 16 8} {32 32 8} {48 48 8} {48 48 24}

J'ai bien 7 vues et la dernière (index n°6) fait bien 48x48@24bits.

Attention : on ne peut pas rajouter de vues aux .exe .dll ou .icl !

c) Créer un nouveau fichier .ico avec une seule vue.

Même principe que ci-dessus, mais on spécifie un fichier qui n'existe pas encore :

 % ::ico::writeIcon exemple2.ico ICO 0 4 image1

Seule restriction : index doit toujours être 0 dans ce cas.

Une fois le fichier créé, on ajouter des vues avec la méthode b)


Créer un fichier .ico à partir d'un .exe .dll ou .icl :

 % ::ico::EXEtoICO source nouveau.ico

avec :

Toutes les vues disponibles dans la source seront ajoutées au fichier icône créé avec cette commande.

Voilà, ce ne sont que les commandes de bases (voir icons.tcl et icons.txt pour le reste) mais on peut déjà faire beaucoup de choses avec ces quelques commandes.


GS Sous Windows, il existe quelques freeware pour éditer des icônes dont Icon Suite [1] qui gère les 3 tailles.

Kroc Il existe aussi un excellent freeware dispo ici : [2]


Vincent VERDON - le 20 décembre 2007 (c'est mon anniversaire !)

J'ai créé Tikone interface graphique qui permet de changer les icônes incluses dans les fichers.