Icônes Macintosh

Résumé : Page d'information sur les icônes Macintosh. Comment sont-elles stockées ? Comment sont-elles produites ? Est-il possible d'en produire sur un PC ?
 

Introduction

Cette page est de nature relativement technique. Dans la mesure où j'ai rencontré de sérieuses difficultés à recueillir les informations nécessaires, sur le site d'Apple ainsi que d'autres, j'ai décidé de publier ici les données avérées que j'ai pu noter au fur et à mesure.

Aspects techniques des icônes personnalisées

Le principe technique est relativement simple. Ces icônes personnalisées sont des icônes normales (voir l'aide de WinComposer pour des informations plus techniques), mais qui doivent porter le numéro d'identification « magique » -16455). Le fichier qui les contient doit être caché. Un drapeau d'attribut spécial doit être armé dans la rubrique du dossier dans le catalogue.
Dans le cas d'un fichier, les données graphiques (qui doivent répondre aux mêmes conditions) sont intégrées dans la branche de ressources du fichier. Cette fois, c'est la rubrique du fichier elle-même dont l'attribut doit être correctement armé.
Ces ressources graphiques ne sont pas enregistrées par le Finder dans sa base de données (Desktop).

Icônes personnalisées de dossiers

Le dossier doit contenir un fichier caché appelé 'Icon ' (avec 0x0D comme dernier caractère) contenant des ressources graphiques voulues de type icône (voir les explications détaillées données dans l'aide de WinComposer). L'atttibut « Icône personnalisée » doit être armé dans la rubrique du dossier.

Icônes personnalisées de volumes

Sous Mac OS 9 et antérieur, la racine du disque est traitée comme un dossier normal et doit contenir le même fichier 'icon '.
Sous Mac OS X, le fichier contenant l'icône doit être nommé '.VolumeIcon.icns', il doit être caché et l'icône, contenue dans la branche de données, doit être de type 'icns' (voir l'aide de WinComposer pour des informations techniques complémentaires).
Si vous visez toutes les versions du système d'exploitation Macintosh, vous pouvez inclure les deux fichiers. Mac OS X a repris de ses racines Unix la convention de traiter tous les fichiers commençant par un point comme des fichiers systèmes cachés. Le fichier '.VolumeIcon.icns' ne sera donc jamais affiché sous Mac OS X. Ce n'est pas le cas sous Mac OS 9 et antérieur, qui ne connaît pas cette convention. Il est donc indispensable d'armer l'attribut caché de ce fichier si vous ne voulez pas semer la perplexité parmi les utilisateurs.

WinComposer

Voir aussi notre page d'introduction sur les Icônes personnalisées Macintosh, comment les produire avec WinComposer et comment les intégrer dans les CD-ROM que vous produisez avec MacImage.

Table des différentes ressources utilisées pour les icônes

SignatureCommentaires
cicnIcônes des menus et des dialogues, couleur (cicn = color icon), contenant une palette, un bitmap et un masque. C'est soit une icône 32*32 avec masque, soit une icône de taille quelconque sans masque. Il est possible de définir la profondeur de couleurs. Voir IM:Imaging with QuickDraw.
clutTable de consultation (Color Look-Up Table). Ressource contenant la table de consultation (palette) utilisée par le Palette Manager. Les principales palettes par défaut sont la palette N&B, la palette 16 couleurs, la palette des icônes et la palette 256 couleurs. Voir la palette 256 couleurs affichée par WinComposer.
h8mkMasque 32*32, 256 niveaux de transparence, longueur 2304 (0x900).
ich#Icône 48*48, N&B + masque, longueur 576 octets (0x240)
ich4Icône 48*48, 16 couleurs, taille 1152 octets (0x480)
ich8Icône 48*48, 256 couleurs, taille 2304 octets (0x900)
icl4Icône 32*32, 16 couleurs (4 bits), taille 512 octets (0x200)
icl8Icône 32*32, 256 couleurs (8 bits), taille 1024 octets (0x400)
icm#Mini-icônes (12*16), N&B
icm4Mini-icônes (12*16), couleur, 4 bits
icm8Mini-icônes (12*16), couleur, 8 bits
ICN#Icône 32*32 N&B (1 bit/pixel) + le masque, taille 256 octets (2 * 128).
icnsResource unique contenant plusieurs ressources d'icônes dans un conteneur unique. Sous Mac OS X, il est possible de fournir les icônes dans un fichier dont l'extension doit être *.icns.
IconIcônes des menus
ICONIcônes des menus et des dialogues, 32*32, N&B, sans masque. Toujours affiché sur fond blanc, donc pas de masque.
ics#Icône 16*16, N&B, longueur 64 octets
ics4Icône 16*16, 16 couleurs, taille 128 octets
ics8Icône 16*16, 256 couleurs, taille 256 octets
ih32Icône 48*48, 32 bits, longueur variable (ressource comprimée).
il32Icône 32*32, 32 bits, longueur variable (ressource comprimée).
is32Icône 16*16, 32 bits, longueur variable (ressource comprimée).
it32Icône 128*128, 32 bits, longueur variable (ressource comprimée).
l8mkMasque 32*32, 256 niveaux de transparence, taille 1024 octets
s8mkMasque 16*16, 256 niveaux de transparence, taille 256 octets
SICNIcônes système (S) ou aussi small (?). Format 12*16, stockées dans une matrice 16*16. Le format permet de stocker un nombre quelconque d'icônes mais par convention, il y a seulement une icône N&B et son masque.
t8mkMasque 128*128, 256 niveaux de transparence, longueur 0x00004008 (longueur utile 16384)

La ressource icns pour les icônes modernes

La plupart des ressources ci-dessus revêtent un aspect assez historique. La tendance actuelle est à l'emploi pratiquement exclusif de la ressource icns, dont le gros avantage est d'éviter l'éparpillement, puisque toutes les ressources nécessaires sont incluses dans un conteneur unique.
Cette ressource, dont on notera qu'elle n'est pas comprise par l'utilitaire ResEdit, a été introduite avec le Système 8.5.
À titre de précaution, il convient donc toujours de lui ajouter une ressource d'icône monochrome de base, de type ICN#, pour le cas (peu probable aujourd'hui) où la machine de destination tournerait sous une version plus ancienne du système.
De la même manière, compte tenu du renouvellement du parc, il est peu probable qu'il soit nécessaire de fournir des icônes en 4 bits/pixel.
Une ressource icns moderne contiendra donc une ressource ICN# et les ressources 32 bits pour les icônes en 32*32 pixels, 48*48 pixels et éventuellement 128*128 pixels.

Méthode de compression

Les icônes en 32 bits/pixel peuvent être comprimées. À la lecture, il convient donc de vérifier que la longueur annoncée dans l'en-tête de la ressource ne correspond pas à sa taille théorique (largeur * hauteur).
Si tel est le cas, il convient de décomprimer les données. Le principe est d'avoir une compression canal par canal, dans l'ordre rouge, vert puis bleu. Le canal alpha n'est pas inclus dans cette ressource comprimée. Il faut aller le chercher dans la ressource ?8mk correspondant (voir le tableau ci-dessus).

Pseudo-code :

La méthode de compression utilisée n'a pas été documentée par Apple. Elle a cependant été élucidée, probablement par Peter Stuer. J'ai utilisé comme base de travail le code de ResCafé, un utilitaire d'exploration des ressources écrit en Java par G. Brannon Smith.

Pour chacune des couleurs (rouge, vert, bleu) et sur la longueur maximale qui
correspond à la taille de l'image, lire un octet.
Si le bit 8 de l'octet est armé :
   C'est une séquence comprimée d'une valeur unique (qui suit immédiatement).
   La longueur est égale à l'octet - 125.
   Placer le tout dans le canal de la couleur en cours.
Sinon :
   C'est une séquence non comprimée, dont les valeurs suivent.
   La longueur est de octet + 1.
   Lire et les placer dans le canal de la couleur en cours.

 
Pierre Duhem (ex-Logiciels & Services Duhem)
3, rue Pierre Haret - F-75009 Paris (France) - Tél. (+33) [0]149 700 455
web : http://www.macdisk.com