home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HAM Radio 1
/
HamRadio.cdr
/
misc
/
fax40
/
bildfmt.doc
next >
Wrap
Text File
|
1989-09-17
|
6KB
|
153 lines
Struktur der DK8JV-FAX Bilddatendateien.
========================================
Jede Bilddatendatei besteht aus einem Header und der eigentlichen
Bildinformation, welche zeilenweise komprimiert abgespeichert ist.
Der Header hat folgenden Aufbau:
Zuerst kommt eine Zeile Text mit einer maximalen Länge von 80 Zeichen,
abgeschlossen mit CR, LF, EOF. (0Dh,0Ah,1Ah)
Dabei muss der Text mit der Zeichensequenz JVGRAPH-FAX beginnen, da die
Datei ansonsten von SHOWPIC nicht als Bilddatenfile akzeptiert wird.
Der weitere Inhalt dieser Textzeile ist ohne besondere Bedeutung.
Hinter der EOF-Marke folgt die eigentliche Headerinformation mit folgendem
Aufbau:
1) Wort ..... Anzahl Bildpunkte pro (unkomprimierte) Bildzeile
2) Wort ..... Modul (z.B. 576, 288 etc...)
3) Wort ..... Trommeldrehzahl, in der das Bild empfangen wurde (LPM)
4) Byte ..... Bit 0 = 1: Bild wurde in Grau=ein empgangen,
Bit 0 = 0: Bild wurde in Grau=aus empfangen.
Bit 1 = 1: Bild wurde mit 64 Graustufen empfangen,(ab FAX3.0)
Bit 1 = 0: Bild wurde mit 16 Graustufen empfangen.( " )
Bit 2 = 0: Bilddatendatei Vers. 2.5 Format (bis FAX3.1)
Bit 2 = 1: Bilddatendatei Vers. 3.3 Format (ab FAX3.3)
5) Byte ..... Bit 0 = 1: Bild wurde Right to Left empfangen,
Bit 0 = 0: Bild wurde Left to Right empfangen,
Bit 1 = 1: Bild wurde Bottom to Top empfangen,
Bit 1 = 0: Bild wurde Top to Bottom empfangen.
6) Byte ..... Bit 0 = 1: Bild wurde in horizontaler Darstellung empfangen,
Bit 0 = 0: Bild wurde in vertikaler Darstellung empfangen.
7) Byte ..... Bit 0 = 1: Bild wurde als reine Schwarzweissdarstellung
abgespeichert,
Bit 0 = 0: Bild wurde entsprechend dem Flag Grau ein/aus
abgespeichert.
(Dieses Byte ist eigentlich redundant)
(Ich fange bei den Bits eines Bytes mit 0 (=LSB) an zu zählen)
An diesen Header schließt sich die eigentliche zeilenweise gepackte Bild-
information an. Jede Zeile kann also eine unterschiedliche Länge in der Bild-
datendatei einnehmen und hat folgenden Aufbau:
Bis zur Vers. 2.5 der Bilddatendateien gilt folgendes:
1) Wort ..... Länge der Zeile in der Bilddatendatei in Bytes oder aber
FFFFh für Datenende (=Dateiende)
Durch die eingefügte Längeninformation kann man schneller
uninteressante Bildabschnitte überspringen, ohne die Zeilen
entkomprimieren zu müssen. (z.B. bei Zoom)
Die darauffolgenden Bytes sind wie folgt zu interpretieren:
Wiederhole
lies ein Byte,
Falls Bit 7 = 1, dann
Beginne
Falls Bit 6 = 0, dann
wiederhole das darauffolgende Byte (Flagbyte and 3Fh) mal.
sonst
wiederhole übernächstes Byte (256*(Flagbyte and 3Fh)+nächstes Byte) mal.
Ende, ansonsten
übernimm die nächsten Flagbyte Bytes unverändert.
Bis alle Bytes der Zeile gelesen sind.
Beispiel:
eine Zeile (HEX):
0011 85 00 C1 01 FF 09 FE FF 1F 7F FF AA FF FC FD 84 0F
(Länge 17 Bytes, das Längenwort wird nicht gezählt))
ergibt entpackt:
5 * 00 257 * FF FE FF 1F 7F FF AA FF FC FD 4 * 0F
(macht 275 Bytes)
Wenn man so sukzessive einen Puffer vollschreibt, so hat man in ihm schliess-
lich die entkomprimierte Zeile stehen.
Falls ein Bild in Graudarstellung abgespeichert worden ist, stehen jetzt in
jedem Byte 2 Bildpunkte à 4 Bit, zuerst Low-, dann High-Nibble, oder aber im
Falle von Bildern mit 64 Graustufen ein Bildpunkt pro Byte.
Bei Schwarzweiss abgespeicherten Bildern stehen 8 Bildpunkte in jedem Byte,
wobei das LSB zuerst kommt, und zuletzt das MSB.
Ab der Version 3.3 der Bilddatendateien wird ein verbessertes
Kompressionsverfahren verwendet. Es handelt sich wieder um ein Lauflängen-
verfahren, allerdings wird jede Lauflänge in einem Byte untergebracht, und
bei Graudarstellungen wird zeilenweise jeweils ein Wertigkeitsbit gepackt.
Zunächst für Schwarzweiss:
1) Wort ..... Länge der Zeile in der Bilddatendatei in Bytes oder aber
FFFFh für Datenende (=Dateiende)
Durch die eingefügte Längeninformation kann man schneller
uninteressante Bildabschnitte überspringen, ohne die Zeilen
entkomprimieren zu müssen. (z.B. bei Zoom)
Die darauffolgenden Bytes sind wie folgt zu interpretieren:
Bit: 76543210
X0YYYYYY entspricht YYYYYY Bildpunkten mit Wert X (X=0: Schwarz)
X10YYYYY entspricht 64*YYYYY Bildpunkten mit Wert X (X=0: Schwarz)
X11YZUVW entspricht 6 Bildpunkten mit Werten X, Y, Z, U, V, W.
Beispiel:
die Bytes
10001111 01000010 11110110 entsprechen
16 Bildpunkten Weiß, 128 Bildpunkten Schwarz und den Bildpunkten
Weiß, Schwarz, Weiß, Weiß, Schwarz.
Bei Graudarstellung sind zunächst in einer Bilddatenzeile die MSBs der
Bildzeile gepackt, dann in der nächsten Zeile die zweithöchstwertigen Bits
und so fort bis zu den LSBs.
D.h. bei 4-Bit Grauwertdarstellung machen 6 Bilddatenzeilen eine Bildzeile;
bei 6-Bit Graudarstellung besteht eine Bildzeile aus 6 Bilddatenzeilen.
Obwohl dieses Kompressionsverfahren denkbar primitiv ist, fallen die Dateien
im Schnitt um 30% kleiner aus als die mit Vers. 2.5 komprimierten.
Mit dieser Information dürfte es nicht schwierig sein, eigene Programme zum
Weiterverarbeiten bzw. Umformatieren der Bilddatendateien zu schreiben.