Bitmap Compression
Windows prend en charge les formats de compression des bitmaps qui définissent leurs couleurs avec 8 ou 4 bits par pixel. La compression réduit le stockage de disque et de mémoire requis pour la bitmap.
Lorsque le membre Compression de la structure d’en-tête d’informations bitmap est BI_RLE8, un format d’encodage de longueur d’exécution (RLE) est utilisé pour compresser une image bitmap 8 bits. Ce format peut être compressé en mode encodé ou absolu. Les deux modes peuvent se produire n’importe où dans la même bitmap :
- Le mode encodé se compose de deux octets : le premier octet spécifie le nombre de pixels consécutifs à dessiner à l’aide de l’index de couleur contenu dans le deuxième octet. En outre, le premier octet de la paire peut être défini sur zéro pour indiquer un caractère d’échappement qui désigne la fin d’une ligne, la fin d’une bitmap ou un delta, en fonction de la valeur du deuxième octet. L’interprétation de l’échappement dépend de la valeur du deuxième octet de la paire, qui peut être l’une des valeurs suivantes.
Valeur | Signification |
---|---|
0 | Fin de ligne. |
1 | Fin de bitmap. |
2 | Delta. Les 2 octets qui suivent l’échappement contiennent des valeurs non signées indiquant le décalage vers la droite et vers le haut du pixel suivant par rapport à la position actuelle. |
- En mode absolu, le premier octet est égal à zéro et le deuxième octet est une valeur comprise entre 03H et FFH. Le deuxième octet représente le nombre d’octets qui suivent, chacun contenant l’index de couleur d’un seul pixel. Lorsque le deuxième octet est inférieur ou égal à deux, l’échappement a la même signification que le mode encodé. En mode absolu, chaque exécution doit être non rembourrée pour se terminer sur une limite de mots 16 bits.
L’exemple suivant montre les valeurs hexadécimales d’une bitmap compressée 8 bits :
[03 04] [05 06] [00 03 45 56 67 00] [02 78] [00 02 05 01]
[02 78] [00 00] [09 1E] [00 01]
La bitmap se développe comme suit (les valeurs à deux chiffres représentent un index de couleur pour un seul pixel) :
04 04 04
06 06 06 06 06
45 56 67
78 78
move current position 5 right and 1 up
78 78
end of line
1E 1E 1E 1E 1E 1E 1E 1E 1E
end of RLE bitmap
Lorsque le membre Compression est BI_RLE4, l’image bitmap est compressée à l’aide d’un format d’encodage d’exécution pour une image bitmap 4 bits, qui utilise également les modes encodé et absolu :
- En mode encodé, le premier octet de la paire contient le nombre de pixels à dessiner à l’aide des index de couleur du deuxième octet. Le deuxième octet contient deux index de couleur, l’un dans son ordre élevé 4 bits et l’autre dans son ordre inférieur 4 bits. Le premier des pixels est dessiné à l’aide de la couleur spécifiée par les 4 bits d’ordre élevé, le second est dessiné à l’aide de la couleur dans les 4 bits d’ordre inférieur, le troisième est dessiné à l’aide de la couleur dans les 4 bits d’ordre élevé, et ainsi de suite, jusqu’à ce que tous les pixels spécifiés par le premier octet aient été dessinés.
- En mode absolu, le premier octet est égal à zéro. Le deuxième octet contient le nombre d’index de couleur qui suivent. Les octets suivants contiennent des index de couleur dans leurs 4 bits d’ordre élevé et inférieur, un index de couleur pour chaque pixel. En mode absolu, chaque exécution doit être alignée sur une limite de mot. Les échappements de fin de ligne, de fin de bitmap et de delta décrits pour BI_RLE8 s’appliquent également à BI_RLE4 compression.
L’exemple suivant montre les valeurs hexadécimales d’une bitmap compressée 4 bits :
03 04 05 06 00 06 45 56 67 00 04 78 00 02 05 01
04 78 00 00 09 1E 00 01
La bitmap se développe comme suit (les valeurs à un chiffre représentent un index de couleur pour un seul pixel) :
0 4 0
0 6 0 6 0
4 5 5 6 6 7
7 8 7 8
move current position 5 right and 1 up
7 8 7 8
end of line
1 E 1 E 1 E 1 E 1
end of RLE bitmap