Delen via


Device-Independent bitmaps

Een apparaatonafhankelijke bitmap (DIB) bevat een kleurentabel. In een kleurentabel wordt beschreven hoe pixelwaarden overeenkomen met RGB- kleurwaarden, waarin kleuren worden beschreven die worden geproduceerd door licht te verzenden. Een DIB kan dus het juiste kleurenschema bereiken op elk apparaat. Een DIB bevat de volgende kleur- en dimensiegegevens:

  • De kleurnotatie van het apparaat waarop de rechthoekige afbeelding is gemaakt.
  • De resolutie van het apparaat waarop de rechthoekige afbeelding is gemaakt.
  • Het palet voor het apparaat waarop de installatiekopieën zijn gemaakt.
  • Een matrix met bits die rood, groen, blauw (RGB-) drietallen toebedeelt aan pixels in de rechthoekige afbeelding.
  • Een gegevenscompressie-id die het gegevenscompressieschema (indien aanwezig) aangeeft dat wordt gebruikt om de grootte van de matrix met bits te verminderen.

De kleur- en dimensiegegevens worden opgeslagen in een BITMAPINFO structuur, die bestaat uit een BITMAPINFOHEADER structuur, gevolgd door twee of meer RGBQUAD structuren. De BITMAPINFOHEADER structuur specificeert de afmetingen van de pixelrechthoek, beschrijft de kleurtechnologie van het apparaat en identificeert de compressieschema's die worden gebruikt om de grootte van de bitmap te verkleinen. De RGBQUAD structuren identificeren de kleuren die worden weergegeven in de pixelrechthoek.

Er zijn twee soorten DIBs:

  • Een onderste dib, waarin de oorsprong zich in de linkerbenedenhoek bevindt.
  • Een dib van boven naar beneden, waarin de oorsprong zich in de linkerbovenhoek bevindt.

Als de hoogte van een DIB, zoals aangegeven door de Height lid van de structuur van de bitmapinformatieheader, een positieve waarde is, is het een bottom-up DIB; als de hoogte een negatieve waarde is, is dit een dib van boven naar beneden. Dibs van boven naar beneden kunnen niet worden gecomprimeerd.

De kleurnotatie wordt opgegeven in termen van het aantal kleurvlakken en kleur bits. Het aantal kleurvlakken is altijd 1; het aantal kleur bits is 1 voor monochrome bitmaps, 4 voor VGA-bitmaps en 8, 16, 24 of 32 voor bitmaps op andere kleurenapparaten. Een toepassing haalt het aantal kleur-bits op dat door een bepaalde weergave (of printer) wordt gebruikt door de functie GetDeviceCaps aan te roepen, waarbij BITS PIXEL wordt opgegeven als het tweede argument.

De resolutie van een beeldschermapparaat wordt opgegeven in pixels per meter. Een toepassing kan de horizontale resolutie voor een videoweergave of printer ophalen door dit proces in drie stappen te volgen.

  1. Roep de functie GetDeviceCaps aan en geef HORZRES op als het tweede argument.
  2. Roep GetDeviceCaps een tweede keer aan en geef HORZSIZE op als het tweede argument.
  3. Deel de eerste retourwaarde door de tweede retourwaarde.

De toepassing kan de verticale resolutie ophalen met behulp van hetzelfde proces in drie stappen met verschillende parameters: VERTRES in plaats van HORZRES en VERTSIZE in plaats van HORZSIZE.

Het palet wordt vertegenwoordigd door een matrix van RGBQUAD structuren die de onderdelen van de rode, groene en blauwe intensiteit opgeven voor elke kleur in het kleurenpalet van een displayapparaat. Elke kleurindex in de paletmatrix wordt toegewezen aan een specifieke pixel in het rechthoekige gebied dat aan de bitmap is gekoppeld. De grootte van deze matrix, in bits, is gelijk aan de breedte van de rechthoek, in pixels, vermenigvuldigd met de hoogte van de rechthoek, in pixels, vermenigvuldigd met het aantal kleur-bits voor het apparaat. Een toepassing kan de grootte van het palet van het apparaat ophalen door de functie GetDeviceCaps aan te roepen, waarbij NUMCOLORS wordt opgegeven als het tweede argument.

Windows ondersteunt de compressie van de paletmatrix voor 8-bpp- en 4-bpp-dibs onderaan. Deze matrices kunnen worden gecomprimeerd met behulp van het RLE-schema (Run Length Encoding). Het RLE-schema maakt gebruik van twee bytewaarden, de eerste byte die het aantal opeenvolgende pixels aangeeft dat een kleurindex gebruikt en de tweede byte die de index specificeert. Zie de beschrijving van de BITMAPINFOHEADER, BITMAPFILEHEADER, BITMAPV4HEADERen BITMAPV5HEADER structuren voor meer informatie over bitmapcompressie.

Een toepassing kan een DIB van een DDB maken door de vereiste structuren te initialiseren en de GetDIBits--functie aan te roepen. Als u wilt bepalen of een apparaat deze functie ondersteunt, roept u de functie GetDeviceCaps aan en geeft u RC_DI_BITMAP op als de vlag RASTERCAPS.

Een toepassing die een bitmap moet kopiëren, kan TransparentBlt- gebruiken om alle pixels in een bron bitmap te kopiëren naar een doel bitmap, met uitzondering van de pixels die overeenkomen met de transparante kleur.

Een toepassing kan een DIB gebruiken om pixels op het weergaveapparaat in te stellen door de SetDIBitsToDevice- of de StretchDIBits--functie aan te roepen. Als u wilt bepalen of een apparaat de functie SetDIBitsToDevice ondersteunt, roept u de functie GetDeviceCaps aan en geeft u RC_DIBTODEV op als de vlag RASTERCAPS. Geef RC_STRETCHDIB op als de vlag RASTERCAPS om te bepalen of het apparaat ondersteuning biedt voor StretchDIBits-.

Een toepassing die gewoon een bestaande DIB moet weergeven, kan de functie SetDIBitsToDevice gebruiken. Een spreadsheettoepassing kan bijvoorbeeld bestaande grafieken openen en weergeven in een venster met behulp van de functie SetDIBitsToDevice. Als u een bitmap herhaaldelijk opnieuw wilt tekenen in een venster, moet de toepassing echter de functie BitBlt- gebruiken. Een multimediatoepassing die geanimeerde afbeeldingen combineert met geluid, kan bijvoorbeeld profiteren van het aanroepen van de functie BitBlt- omdat deze sneller wordt uitgevoerd dan SetDIBitsToDevice-.