Device-Independent Bitmaps
Une bitmap indépendante de l’appareil (DIB) contient une table de couleurs . Un tableau de couleurs décrit comment les valeurs de pixel correspondent à valeurs de couleur RVB, qui décrivent les couleurs produites par l’émission de lumière. Ainsi, une DIB peut obtenir le jeu de couleurs approprié sur n’importe quel appareil. Une DIB contient les informations de couleur et de dimension suivantes :
- Format de couleur de l’appareil sur lequel l’image rectangulaire a été créée.
- Résolution de l’appareil sur lequel l’image rectangulaire a été créée.
- Palette de l’appareil sur lequel l’image a été créée.
- Tableau de bits qui mappe les triplets rouge, vert, bleu (RVB) en pixels dans l’image rectangulaire.
- Identificateur de compression de données qui indique le schéma de compression des données (le cas échéant) utilisé pour réduire la taille du tableau de bits.
Les informations de couleur et de dimension sont stockées dans une structure BITMAPINFO, qui se compose d’une structure BITMAPINFOHEADER suivie de deux structures RVBQUAD ou plus. La structure BITMAPINFOHEADER spécifie les dimensions du rectangle de pixels, décrit la technologie de couleur de l’appareil et identifie les schémas de compression utilisés pour réduire la taille de la bitmap. Les structures RGBQUAD identifient les couleurs qui apparaissent dans le rectangle de pixels.
Il existe deux variétés de diBs :
- Une DIB en bas vers le haut, dans laquelle l’origine se trouve dans le coin inférieur gauche.
- DIB en haut vers le bas, dans lequel l’origine se trouve en haut à gauche.
Si la hauteur d’une DIB, comme indiqué par l'Height membre de la structure d’en-tête d’informations bitmap, est une valeur positive, il s’agit d’une DIB en bas ; si la hauteur est une valeur négative, il s’agit d’une DIB en haut vers le bas. Les dibs de haut en bas ne peuvent pas être compressés.
Le format de couleur est spécifié en termes de nombre de plans de couleurs et de bits de couleur. Le nombre de plans de couleur est toujours égal à 1 ; le nombre de bits de couleur est 1 pour les bitmaps monochromes, 4 pour les bitmaps BITMAP et 8, 16, 24 ou 32 pour les bitmaps sur d’autres appareils de couleur. Une application récupère le nombre de bits de couleur qu’utilise un affichage particulier (ou une imprimante) en appelant la fonction GetDeviceCaps, en spécifiant BITSPIXEL comme deuxième argument.
La résolution d’un appareil d’affichage est spécifiée en pixels par compteur. Une application peut récupérer la résolution horizontale d’un affichage vidéo ou d’une imprimante en suivant ce processus en trois étapes.
- Appelez la fonction GetDeviceCaps, en spécifiant HORZRES comme deuxième argument.
- Appelez GetDeviceCaps une deuxième fois, en spécifiant HORZSIZE comme deuxième argument.
- Divisez la première valeur de retour par la deuxième valeur de retour.
L’application peut récupérer la résolution verticale à l’aide du même processus en trois étapes avec différents paramètres : VERTRES à la place d’HORZRES et VERTSIZE à la place d’HORZSIZE.
La palette est représentée par un tableau de structures RGBQUAD qui spécifient les composants d’intensité rouge, vert et bleu pour chaque couleur dans la palette de couleurs d’un appareil d’affichage. Chaque index de couleur du tableau de palettes est mappé à un pixel spécifique dans la région rectangulaire associée à la bitmap. La taille de ce tableau, en bits, équivaut à la largeur du rectangle, en pixels, multipliée par la hauteur du rectangle, en pixels, multipliée par le nombre de bits de couleur pour l’appareil. Une application peut récupérer la taille de la palette de l’appareil en appelant la fonction GetDeviceCaps, en spécifiant NUMCOLORS comme deuxième argument.
Windows prend en charge la compression du tableau de palettes pour 8 bpp et 4 bpp de bas en haut des diBs. Ces tableaux peuvent être compressés à l’aide du schéma d’encodage de longueur d’exécution (RLE). Le schéma RLE utilise des valeurs de 2 octets, le premier octet spécifiant le nombre de pixels consécutifs qui utilisent un index de couleur et le deuxième octet spécifiant l’index. Pour plus d’informations sur la compression bitmap, consultez la description dubitmapINFOHEADER, bitmapFILEHEADER, BITMAPV4HEADERet BITMAPV5HEADER structures.
Une application peut créer une DIB à partir d’une base de données DDB en initialisant les structures requises et en appelant la fonction GetDIBits. Pour déterminer si un appareil prend en charge cette fonction, appelez la fonction GetDeviceCaps, en spécifiant RC_DI_BITMAP comme indicateur RASTERCAPS.
Une application qui doit copier une bitmap peut utiliser TransparentBlt pour copier tous les pixels d’une bitmap source vers une bitmap de destination, à l’exception des pixels qui correspondent à la couleur transparente.
Une application peut utiliser une DIB pour définir des pixels sur l’appareil d’affichage en appelant la fonction SetDIBitsToDevice ou la fonction StretchDIBits. Pour déterminer si un appareil prend en charge la fonction SetDIBitsToDevice, appelez la fonctionGetDeviceCaps, en spécifiant RC_DIBTODEV comme indicateur RASTERCAPS. Spécifiez RC_STRETCHDIB comme indicateur RASTERCAPS pour déterminer si l’appareil prend en charge StretchDIBits.
Une application qui doit simplement afficher une DIB préexistante peut utiliser la fonction SetDIBitsToDevice. Par exemple, une application de feuille de calcul peut ouvrir des graphiques existants et les afficher dans une fenêtre à l’aide de la fonction SetDIBitsToDevice. Pour redessiner à plusieurs reprises une bitmap dans une fenêtre, toutefois, l’application doit utiliser la fonction BitBlt. Par exemple, une application multimédia qui combine des graphismes animés avec du son tirerait parti de l’appel de la fonction BitBlt, car elle s’exécute plus rapidement que SetDIBitsToDevice.