Komprese rastrového obrázku
Systém Windows podporuje formáty pro komprimaci rastrových obrázků, které definují jejich barvy s 8 nebo 4 bity na pixel. Komprese snižuje velikost disku a paměti požadované pro rastrový obrázek.
Pokud Compression člen struktury záhlaví rastrových informací je BI_RLE8, formát RLE (run-length) slouží ke komprimaci 8bitové bitmapy. Tento formát lze komprimovat v kódovaných nebo absolutních režimech. Oba režimy můžou nastat kdekoli ve stejném rastrovém obrázku:
- kódovaný režim se skládá ze dvou bajtů: první bajt určuje počet po sobě jdoucích pixelů, které se mají nakreslit pomocí barevného indexu obsaženého ve druhém bajtu. Kromě toho může být první bajt dvojice nastaven na nulu, která označuje řídicí znak, který označuje konec řádku, konec rastrového obrázku nebo rozdíl v závislosti na hodnotě druhého bajtu. Interpretace řídicího znaku závisí na hodnotě druhého bajtu dvojice, což může být jedna z následujících hodnot.
Hodnota | Význam |
---|---|
0 | Konec řádku. |
1 | Konec rastrového obrázku |
2 | Delta. 2 bajty následující za řídicím znakem obsahují hodnoty bez znaménka označující posun doprava a nahoru od aktuální pozice. |
- V absolutní režim, první bajt je nula a druhý bajt je hodnota v rozsahu 03H až FFH. Druhý bajt představuje počet bajtů, které následují, z nichž každý obsahuje barevný index jednoho pixelu. Pokud je druhý bajt dva nebo méně, řídicí znak má stejný význam jako kódovaný režim. V absolutním režimu musí být každé spuštění na 16bitové hranici slova s nulovou nulou.
Následující příklad ukazuje šestnáctkové hodnoty 8bitové komprimované bitmapy:
[03 04] [05 06] [00 03 45 56 67 00] [02 78] [00 02 05 01]
[02 78] [00 00] [09 1E] [00 01]
Rastrový obrázek se rozbalí následujícím způsobem (dvouciferné hodnoty představují barevný index pro jeden 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
Je-li BI_RLE4 člen Compression, rastrový obrázek se komprimuje pomocí formátu kódování délky spuštění pro 4bitovou bitmapu, která používá také kódované a absolutní režimy:
- V zakódovaném režimu obsahuje první bajt páru počet pixelů, které se mají nakreslit pomocí barevných indexů v druhém bajtu. Druhý bajt obsahuje dva barevné indexy, jeden ve vysokém pořadí 4 bitů a jeden v jeho 4 bitech s nízkým pořadím. První z pixelů se nakreslí barvou určenou vysokým pořadím 4 bitů, druhý se nakreslí barvou v 4 bitech s nízkým pořadím, třetí se nakreslí barvou ve vysokém pořadí 4 bitů a tak dále, dokud nebudou nakresleny všechny pixely určené prvním bajtem.
- V absolutním režimu je první bajt nula. Druhý bajt obsahuje počet barevných indexů, které následují. Další bajty obsahují indexy barev v jejich 4bitovém a vysokém pořadí, jeden barevný index pro každý pixel. V absolutním režimu musí být každé spuštění zarovnané na hranici slova. End-of-line, end-of-bitmap a delta řídicí panely popsané pro BI_RLE8 platí také pro BI_RLE4 komprese.
Následující příklad ukazuje šestnáctkové hodnoty 4bitové komprimované bitmapy:
03 04 05 06 00 06 45 56 67 00 04 78 00 02 05 01
04 78 00 00 09 1E 00 01
Rastrový obrázek se rozbalí následujícím způsobem (jednociferné hodnoty představují barevný index pro jeden 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