Delen via


Bitmapcompressie

Windows ondersteunt indelingen voor het comprimeren van bitmaps die hun kleuren definiëren met 8 of 4 bits per pixel. Compressie vermindert de schijf- en geheugenopslag die nodig is voor de bitmap.

Wanneer de compressie lid van de structuur van de bitmapinformatieheader is BI_RLE8, wordt een indeling voor de codering (RLE) voor de lengte van de uitvoering gebruikt om een 8-bits bitmap te comprimeren. Deze indeling kan worden gecomprimeerd in gecodeerde of absolute modi. Beide modi kunnen zich overal in dezelfde bitmap voordoen:

  • gecodeerde modus bestaat uit twee bytes: de eerste byte geeft het aantal opeenvolgende pixels op dat moet worden getekend met behulp van de kleurindex in de tweede byte. Bovendien kan de eerste byte van het paar worden ingesteld op nul om een escapeteken aan te geven dat het einde van een regel, het einde van een bitmap of een delta aangeeft, afhankelijk van de waarde van de tweede byte. De interpretatie van de escape is afhankelijk van de waarde van de tweede byte van het paar, die een van de volgende waarden kan zijn.
Waarde Betekenis
0 Einde van regel.
1 Einde van bitmap.
2 Delta. De 2 bytes na de escape bevatten niet-ondertekende waarden die de verschuiving aan de rechterkant en de volgende pixel vanaf de huidige positie aangeven.

 

  • In absolute modus, is de eerste byte nul en de tweede byte een waarde in het bereik van 03H tot en met FFH. De tweede byte vertegenwoordigt het aantal bytes dat volgt, die elk de kleurindex van één pixel bevat. Wanneer de tweede byte twee of minder is, heeft de escape dezelfde betekenis als de gecodeerde modus. In de absolute modus moet elke uitvoering nul-padd zijn om te eindigen op een 16-bits woordgrens.

In het volgende voorbeeld ziet u de hexadecimale waarden van een 8-bits gecomprimeerde bitmap:

[03 04] [05 06] [00 03 45 56 67 00] [02 78] [00 02 05 01] 
[02 78] [00 00] [09 1E] [00 01] 

De bitmap wordt als volgt uitgevouwen (tweecijferige waarden vertegenwoordigen een kleurindex voor één 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 

Wanneer het Compressie- lid is BI_RLE4, wordt de bitmap gecomprimeerd met behulp van een coderingsindeling met de lengte van de uitvoeringslengte voor een 4-bits bitmap, die ook gecodeerde en absolute modi gebruikt:

  • In de gecodeerde modus bevat de eerste byte van het paar het aantal pixels dat moet worden getekend met behulp van de kleurindexen in de tweede byte. De tweede byte bevat twee kleurindexen, één in de hoge volgorde 4 bits en één in de lage volgorde 4 bits. De eerste van de pixels wordt getekend met behulp van de kleur die is opgegeven door de hoge volgorde 4 bits, de tweede wordt getekend met behulp van de kleur in de lage volgorde 4 bits, de derde wordt getekend met behulp van de kleur in de hoge volgorde 4 bits, enzovoort, totdat alle pixels die zijn opgegeven door de eerste byte zijn getekend.
  • In absolute modus is de eerste byte nul. De tweede byte bevat het aantal kleurindexen dat volgt. Volgende bytes bevatten kleurindexen in hun hoge en lage volgorde 4 bits, één kleurindex voor elke pixel. In absolute modus moet elke uitvoering worden uitgelijnd op een woordgrens. De end-of-line-, end-of-bitmap- en delta-escapes die voor BI_RLE8 worden beschreven, zijn ook van toepassing op BI_RLE4 compressie.

In het volgende voorbeeld ziet u de hexadecimale waarden van een 4-bits gecomprimeerde bitmap:

03 04 05 06 00 06 45 56 67 00 04 78 00 02 05 01 
04 78 00 00 09 1E 00 01 

De bitmap wordt als volgt uitgevouwen (waarden met één cijfer vertegenwoordigen een kleurindex voor één 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