KULT Underground

una della più "antiche" e-zine italiane – attiva dal 1994

Icone

3 min read

Icone

Anche questo mese parliamo di file grafici, precisamente parleremo di file di icona. Anche i files di icona, come i file bitmap di cui abbiamo parlato il mese scorso, sono memorizzati in un formato DIB e la loro estensione di default è .ICO.
Ogni file consiste di un icon directory, che identifica il numero ed il tipo delle immagini di icone, e una o più immagini di icone.
L’icon directory è definito come una struttura di tipo ICONDIR e specifica il numero, le dimensioni ed il formato dei colori di ogni icona. La struttura ICONDIR è la seguente:
typedef struct ICONDIR {

WORD idReserved;

WORD idType;

WORD idCount;

ICONDIRENTRY idEntries[idCount]

} ICONHEADER;
idReserved è un valore riservato e deve essere uguale a 0. La word idType specifica il tipo di risorsa, in questo caso deve essere uguale a 1. Il membro idCount indica il numero di elementi nella directory mentre idEntry
è un array di strutture ICONDIRENTRY che contengonole informazioni di ciasuna icona. Il membro idCount della struttura ICONDIR specifica il numero delle strutture dell’array.

Una struttura IconDirectoryEntry è così definita:
struct IconDirectoryEntry {

BYTE bWidth;

BYTE bHeight;

BYTE bColorCount;

BYTE bReserved;

WORD wPlanes;

WORD bBitCount;

DWORD dwByteInRes;

DWORD dwImageOffset;

}
bWidth e bHeight indicano la larghezza e l’altezza dell’icona in pixel (i valori accettabili sono 16, 32 e 64); bColorCount specifica il numero dei colori dell’icona (i valori validi sono 2 e 16), bReserved è un valore riservato e deve essere uguale a 0. Le word wPlanes e bBitCount indicano rispettivamente il numero dei piani di colore ed il numero di bit che definiscono ogni pixel dell’icona. Le double word dwByteInRes e dwImageOffset specificano la dimensione dell’intero filedi risorsa (in byte) e l’offset dall’inizio del file all’immagine vera e propria dell’icona.

Ogni file di icona contiene il numero di icone indicato nella word idCount della struttura ICONDIR. Ogni icona consiste di un header di icona, di una color table, di una maschera AND e di una maschera XOR. L’icona quindi ha la seguente struttura:

BITMAPINFOHEADER icHeader;
RGBQUAD icColors[];
BYTE icXOR[];
BYTE icAND[];

L’header di icona, definito come una struttura BITMAPINFOHEADER di cui solo i primi cinque membri più biSizeImage, vengono utilizzati, gli altri sono posti a 0. La color table, definita come un array di struttura
RGBQUAD, specifica i colori utilizzati nella maschera XOR. Come la color table dei file bitmap, il membro biBitCount dell’header dell’icona determina il numero degli elementi dell’array. La maschera XOR, immediatamente seguente la color table, è un array di byte i cui valori rappresentano i colori di un bitmap. Il bitmap definisce i colori dell’icona.
La mascher AND è un array di byte che definsce un bitmap monocromatico.
Questo bitmap rappresenta la forma dell’icona.
Quando Windows disegna un’icona, usa la maschera AND e la maschera XOR per combinare l’icona con i pixel gia presenti sullo schermo. Prima utilizza la maschera AND, applicando l’operazione AND ai pixel che definiscono lo sfondo; questo procedimento lascia integri o rimuove i colori dei pixel esistenti. Poi Windows applica la maschera XOR utilizzando l’operazione
XOR ai pixel di sfondo. Questo stabilisce il colore finale di ogni pixel.

Andrea Poggi

Commenta