Dies ist ein binäres Format in Big-Endian Anordnung. Folgende Datentypen kommen zur Anwendung:
char | String mit 8-Bit Kodierung |
---|---|
uint8 | vorzeichenlose 8-Bit Zahl |
uint16 | vorzeichenlose 16-Bit Zahl |
Die Daten sind in Blocks organisiert. Zunächst folgen mehrere Metadatenblocks, danach ein oder mehrere Bilddatenblocks. Die Metadatenblocks beginnen mit Blockmarkern, aus welchen sich die Länge des Blocks ableiten lässt.
Alle Metadatenblocks beginnen folgendermassen:
Position | Grösse | Typ | Wert |
---|---|---|---|
0 | 1 Byte | uint8 | 0xFF |
1 | 1 Byte | uint8 | Blocktyp |
Blocks mit Blocktyp 0xD0 - 0xD9 bestehen nur aus diesen beiden Bytes. Bei allen anderen Blocks geht es folgendermassen weiter:
Position | Grösse | Typ | Wert |
---|---|---|---|
2 | 2 Byte | uint16 | Blockgrösse |
4 | Blockgrösse - 2 | * | Blockdaten |
Der Frame Header hat einen der Typen 0xC0 - 0xCF ohne die Typen 0xC4, 0xC8 und 0xCC.
Position | Grösse | Typ | Wert |
---|---|---|---|
0 | 1 Byte | uint8 | 0xFF |
1 | 1 Byte | uint8 | Blocktyp |
2 | 2 Byte | uint16 | Blockgrösse |
4 | 1 Byte | uint8 | Bittiefe |
5 | 2 Byte | uint16 | Bildhöhe |
7 | 2 Byte | uint16 | Bildbreite |
9 | 1 Byte | uint8 | Farbraum |
Der Farbraum ist 1 für Graustufen, 3 für RGB, 4 für CMYK.
Die Blöcke mit dem ICC-Profil haben den Typ 0xE2.
Position | Grösse | Typ | Wert |
---|---|---|---|
0 | 1 Byte | uint8 | 0xFF |
1 | 1 Byte | uint8 | 0xE2 |
2 | 2 Byte | uint16 | Blockgrösse |
4 | 11 Byte | char | ASCII-String ICC-PROFILE |
15 | 1 Byte | uint8 | 0 |
16 | 1 Byte | uint8 | Blocknummer |
17 | 1 Byte | uint8 | Blockanzahl |
18 | Blockgrösse - 16 | * | ICC-Profildaten |
Es können noch andere Blöcke mit Typ 0xE2 vorhanden sein. Darum sollte man auch auf den String ICC-PROFILE
prüfen.
Ist die Blockanzahl nicht 1, so ist das Profil über mehrere Blöcke verteilt. Der Inhalt der Blöcke muss in der durch die Blocknummer vorgegebene Reihenfolge aneinandergehängt werden.
Blöcke mit Typ 0xE0 - 0xFE sind für die Dekompression selbst unnötig, und müssen nicht in das Bildobjekt des PDF übernommen werden.
Der Start of Scan Block hat den Typ 0xDA. Dies ist immer der letzte Metadatenblock. Auf ihn folgen die komprimierten Bilddaten.
Diskussion