Bitmapheadertypen
De bitmap heeft vier basisheadertypen:
De vier typen bitmapheaders worden onderscheiden door de Grootte lid. Dit is de eerste DWORD- in elk van de structuren.
De BITMAPV5HEADER structuur is een uitgebreide BITMAPV4HEADER structuur, een uitgebreide BITMAPINFOHEADER structuur. De BITMAPINFOHEADER- en BITMAPCOREHEADER- hebben echter alleen het Grootte lid gemeen met andere bitmapheaderstructuren.
De BITMAPCOREHEADER-indelingen en BITMAPV4HEADER zijn vervangen door BITMAPINFOHEADER-indeling en BITMAPV5HEADER indelingen. De BITMAPCOREHEADER-- en BITMAPV4HEADER-indelingen worden gepresenteerd voor volledigheid en compatibiliteit met eerdere versies.
De indeling voor een DIB is het volgende (zie voor meer informatie Bitmapopslag):
- een BITMAPFILEHEADER- structuur
- een BITMAPCOREHEADER-, een BITMAPINFOHEADER, een BITMAPV4HEADERof een BITMAPV5HEADER structuur.
- een optionele kleurentabel, een set RGBQUAD- structuren of een set RGBTRIPLE- structuren.
- de bitmapgegevens
- optionele profielgegevens
In een kleurentabel wordt beschreven hoe pixelwaarden overeenkomen met RGB-kleurwaarden. RGB is een model voor het beschrijven van kleuren die worden geproduceerd door het uitzenden van licht.
profielgegevens verwijst naar de naam van het profielbestand (gekoppeld profiel) of de werkelijke profiel-bits (ingesloten profiel). De bestandsindeling plaatst de profielgegevens aan het einde van het bestand. De profielgegevens worden net na de kleurentabel geplaatst (indien aanwezig). Als de functie echter een verpakte DIB ontvangt, worden de profielgegevens na de bitmap-bits geleverd, zoals in de bestandsindeling.
Profielgegevens bestaan alleen voor BITMAPV5HEADER structuren waarbij bV5CSType- is PROFILE_LINKED of PROFILE_EMBEDDED. Voor functies die verpakte DIBs ontvangen, worden de profielgegevens na de bitmapgegevens geleverd.
Een palettized apparaat is elk apparaat dat paletten gebruikt om kleuren toe te wijzen. Het klassieke voorbeeld van een palettized apparaat is een display dat wordt uitgevoerd in de 8-bits kleurdiepte (dat wil gezegd 256 kleuren). De weergave in deze modus maakt gebruik van een kleine kleurentabel om kleuren toe te wijzen aan een bitmap. De kleuren in een bitmap worden toegewezen aan de dichtstbijzijnde kleur in het palet dat het apparaat gebruikt. Het palettized apparaat maakt geen optimaal palet voor het weergeven van de bitmap; het maakt gewoon gebruik van wat zich in het huidige palet bevindt. Toepassingen zijn verantwoordelijk voor het maken van een palet en het selecteren ervan in het systeem. In het algemeen bevatten 16-, 24- en 32 bits-per-pixel bitmaps (bpp) geen kleurentabellen (a.k.a. optimale paletten voor de bitmap); de toepassing is verantwoordelijk voor het genereren van een optimaal palet in dit geval. 16-, 24- en 32-bpp-bitmaps kunnen echter dergelijke optimale kleurentabellen bevatten voor weergave op palettized apparaten; In dit geval hoeft de toepassing alleen een palet te maken op basis van de kleurentabel die aanwezig is in het bitmapbestand.
Bitmaps die 1, 4 of 8 bpp zijn, moeten een kleurentabel met een maximale grootte hebben op basis van de bpp. De maximale grootte voor 1, 4 en 8 bpp bitmaps is 2 tot de macht van de bpp. Een bitmap van 1 bpp heeft dus maximaal twee kleuren, de 4 bpp-bitmap heeft maximaal 16 kleuren en de 8 bpp-bitmap heeft maximaal 256 kleuren.
Bitmaps die 16-, 24- of 32-bpp zijn, hebben geen kleurentabellen nodig, maar ze moeten mogelijk kleuren opgeven voor palettized apparaten. Als er een kleurentabel aanwezig is voor een bitmap van 16-, 24- of 32-bpp, geeft de biClrUsed lid de grootte van de kleurentabel aan en moet de kleurentabel zoveel kleuren bevatten. Als biClrUsed nul is, is er geen kleurentabel.
De rode, groene en blauwe bitfieldmaskers voor BI_BITFIELD bitmaps volgen direct de BITMAPINFOHEADER-, BITMAPV4HEADERen BITMAPV5HEADER structuren. De BITMAPV4HEADER- en BITMAPV5HEADER structuren bevatten als volgt extra leden voor rode, groene en blauwe maskers.
Lid | Betekenis |
---|---|
RedMask- | Kleurenmasker dat het rode onderdeel van elke pixel aangeeft, alleen geldig als het Compressie- lid is ingesteld op BI_BITFIELDS. |
GreenMask- | Kleurenmasker waarmee het groene onderdeel van elke pixel wordt opgegeven, alleen geldig als het Compressie- lid is ingesteld op BI_BITFIELDS. |
BlueMask- | Kleurenmasker dat het blauwe onderdeel van elke pixel aangeeft, alleen geldig als het Compressie- lid is ingesteld op BI_BITFIELDS. |
Wanneer de biCompression lid van BITMAPINFOHEADER is ingesteld op BI_BITFIELDS en de functie een argument van het type LPBITMAPINFOontvangt, worden de kleurmaskers onmiddellijk gevolgd door de koptekst. De kleurentabel, indien aanwezig, volgt de kleurmaskers. BITMAPCOREHEADER bitmaps bieden geen ondersteuning voor kleurmaskers.
Bitmapgegevens zijn standaard onderaan in de indeling. Bottom-up betekent dat de eerste scanregel in de bitmapgegevens de laatste scanregel is die moet worden weergegeven. De 0 pixel van de 0 scanlijn van de bitmapgegevens van een bitmap van 10 pixels met 10 pixels is bijvoorbeeld de 0 pixel van de 9 scanregel van de weergegeven of afgedrukte afbeelding. Bitmaps en BITMAPCOREHEADER bitmaps kunnen geen bitmaps met bovenaf zijn. De scanlijnen worden DWORD uitgelijnd, met uitzondering van met RLE gecomprimeerde bitmaps. Ze moeten worden opgevuld voor scanlijnbreedten, in bytes, die niet gelijkmatig deelbaar zijn door vier, met uitzondering van gecomprimeerde RLE-bitmaps. Een bitmap van 10 pixels van 24 pixels heeft bijvoorbeeld twee opvullingsbytes aan het einde van elke scanregel.