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.
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).
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.
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.
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.
Signature | Commentaires |
cicn | Icô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. |
clut | Table 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. |
h8mk | Masque 32*32, 256 niveaux de transparence, longueur 2304 (0x900). |
ich# | Icône 48*48, N&B + masque, longueur 576 octets (0x240) |
ich4 | Icône 48*48, 16 couleurs, taille 1152 octets (0x480) |
ich8 | Icône 48*48, 256 couleurs, taille 2304 octets (0x900) |
icl4 | Icône 32*32, 16 couleurs (4 bits), taille 512 octets (0x200) |
icl8 | Icône 32*32, 256 couleurs (8 bits), taille 1024 octets (0x400) |
icm# | Mini-icônes (12*16), N&B |
icm4 | Mini-icônes (12*16), couleur, 4 bits |
icm8 | Mini-icônes (12*16), couleur, 8 bits |
ICN# | Icône 32*32 N&B (1 bit/pixel) + le masque, taille 256 octets (2 * 128). |
icns | Resource 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. |
Icon | Icônes des menus |
ICON | Icô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 |
ics4 | Icône 16*16, 16 couleurs, taille 128 octets |
ics8 | Icône 16*16, 256 couleurs, taille 256 octets |
ih32 | Icône 48*48, 32 bits, longueur variable (ressource comprimée). |
il32 | Icône 32*32, 32 bits, longueur variable (ressource comprimée). |
is32 | Icône 16*16, 32 bits, longueur variable (ressource comprimée). |
it32 | Icône 128*128, 32 bits, longueur variable (ressource comprimée). |
l8mk | Masque 32*32, 256 niveaux de transparence, taille 1024 octets |
s8mk | Masque 16*16, 256 niveaux de transparence, taille 256 octets |
SICN | Icô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. |
t8mk | Masque 128*128, 256 niveaux de transparence, longueur 0x00004008 (longueur utile 16384) |
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.
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).
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.