bitmaps Device-Independent
Un bitmap indépendant de l’appareil (DIB) contient une table de couleurs. Un tableau de couleurs décrit comment les valeurs de pixels correspondent aux 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 rouges, verts et bleus ( RVB ) aux pixels dans l’image rectangulaire.
- Identificateur de compression des 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 RGBQUAD 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 l’image bitmap. Les structures RGBQUAD identifient les couleurs qui apparaissent dans le rectangle de pixels.
Il existe deux variétés de DIB :
- DIB de bas en haut, dans lequel l’origine se trouve dans le coin inférieur gauche.
- DIB du haut vers le bas, dans laquelle l’origine se trouve dans le coin supérieur gauche.
Si la hauteur d’une DIB, comme indiqué par le membre Height de la structure d’en-tête d’informations bitmap, est une valeur positive, il s’agit d’une DIB ascendante ; si la hauteur est une valeur négative, il s’agit d’une DIB descendante. Impossible de compresser les DIB de haut en bas.
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 couleurs est toujours de 1 ; le nombre de bits de couleur est de 1 pour les bitmaps monochromes, de 4 pour les bitmaps VGA et de 8, 16, 24 ou 32 pour les bitmaps sur d’autres appareils couleur. Une application récupère le nombre de bits de couleur qu’un affichage (ou imprimante) particulier utilise en appelant la fonction GetDeviceCaps , en spécifiant BITSPIXEL comme deuxième argument.
La résolution d’un périphérique d’affichage est spécifiée en pixels par mètre. Une application peut récupérer la résolution horizontale d’un écran 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 en utilisant le même processus en trois étapes avec différents paramètres : VERTRES à la place de HORZRES et VERTSIZE à la place de 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 dans le tableau de palettes est mappé à un pixel spécifique dans la région rectangulaire associée à l’image 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 les dibs bottom-up 8-bpp et 4-bpp. 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 des structures BITMAPINFOHEADER, BITMAPFILEHEADER, BITMAPV4HEADER et BITMAPV5HEADER .
Une application peut créer une DIB à partir d’un 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 image bitmap peut utiliser TransparentBlt pour copier tous les pixels d’une image 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 StretchDIBits . Pour déterminer si un appareil prend en charge la fonction SetDIBitsToDevice , appelez la fonction GetDeviceCaps , 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 a simplement besoin d’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 . Toutefois, pour redessiner à plusieurs reprises une image bitmap dans une fenêtre, l’application doit utiliser la fonction BitBlt . Par exemple, une application multimédia qui combine des graphiques animés et du son gagnerait à appeler la fonction BitBlt , car elle s’exécute plus rapidement que SetDIBitsToDevice.