home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1 / HamRadio.cdr / misc / fax40 / bildfmt.doc next >
Text File  |  1989-09-17  |  6KB  |  153 lines

  1. Struktur der DK8JV-FAX Bilddatendateien.
  2. ========================================
  3.  
  4. Jede Bilddatendatei besteht aus einem Header und der eigentlichen
  5. Bildinformation, welche zeilenweise komprimiert abgespeichert ist.
  6.  
  7. Der Header hat folgenden Aufbau:
  8.  
  9. Zuerst kommt eine Zeile Text mit einer maximalen Länge von 80 Zeichen,
  10. abgeschlossen mit CR, LF, EOF. (0Dh,0Ah,1Ah)
  11. Dabei muss der Text mit der Zeichensequenz JVGRAPH-FAX beginnen, da die
  12. Datei ansonsten von SHOWPIC nicht als Bilddatenfile akzeptiert wird.
  13. Der weitere Inhalt dieser Textzeile ist ohne besondere Bedeutung.
  14.  
  15. Hinter der EOF-Marke folgt die eigentliche Headerinformation mit folgendem
  16. Aufbau:
  17.  
  18. 1) Wort   .....  Anzahl Bildpunkte pro (unkomprimierte) Bildzeile
  19.  
  20. 2) Wort   .....  Modul (z.B. 576, 288 etc...)
  21.  
  22. 3) Wort   .....  Trommeldrehzahl, in der das Bild empfangen wurde (LPM)
  23.  
  24. 4) Byte   .....  Bit 0 = 1: Bild wurde in Grau=ein empgangen,
  25.                  Bit 0 = 0: Bild wurde in Grau=aus empfangen.
  26.                  Bit 1 = 1: Bild wurde mit 64 Graustufen empfangen,(ab FAX3.0)
  27.                  Bit 1 = 0: Bild wurde mit 16 Graustufen empfangen.(    "    )
  28.                  Bit 2 = 0: Bilddatendatei Vers. 2.5 Format        (bis FAX3.1)
  29.                  Bit 2 = 1: Bilddatendatei Vers. 3.3 Format        (ab FAX3.3)
  30.  
  31. 5) Byte   .....  Bit 0 = 1: Bild wurde Right to Left empfangen,
  32.                  Bit 0 = 0: Bild wurde Left to Right empfangen,
  33.                  Bit 1 = 1: Bild wurde Bottom to Top empfangen,
  34.                  Bit 1 = 0: Bild wurde Top to Bottom empfangen.
  35.  
  36. 6) Byte   .....  Bit 0 = 1: Bild wurde in horizontaler Darstellung empfangen,
  37.                  Bit 0 = 0: Bild wurde in vertikaler Darstellung empfangen.
  38.  
  39. 7) Byte   .....  Bit 0 = 1: Bild wurde als reine Schwarzweissdarstellung
  40.                             abgespeichert,
  41.                  Bit 0 = 0: Bild wurde entsprechend dem Flag Grau ein/aus
  42.                             abgespeichert.
  43.                             (Dieses Byte ist eigentlich redundant)
  44.  
  45.  
  46. (Ich fange bei den Bits eines Bytes mit 0 (=LSB) an zu zählen)
  47.  
  48. An diesen Header schließt sich die eigentliche zeilenweise gepackte Bild-
  49. information an. Jede Zeile kann also eine unterschiedliche Länge in der Bild-
  50. datendatei einnehmen und hat folgenden Aufbau:
  51.  
  52.  
  53. Bis zur Vers. 2.5 der Bilddatendateien gilt folgendes:
  54.  
  55. 1) Wort   .....  Länge der Zeile in der Bilddatendatei in Bytes oder aber
  56.                  FFFFh für Datenende (=Dateiende)
  57.                  Durch die eingefügte Längeninformation kann man schneller
  58.                  uninteressante Bildabschnitte überspringen, ohne die Zeilen
  59.                  entkomprimieren zu müssen. (z.B. bei Zoom)
  60.  
  61.  
  62.  
  63. Die darauffolgenden Bytes sind wie folgt zu interpretieren:
  64.  
  65.  
  66. Wiederhole
  67.  
  68.   lies ein Byte,
  69.  
  70.   Falls Bit 7 = 1, dann
  71.   Beginne
  72.     Falls Bit 6 = 0, dann
  73.       wiederhole das darauffolgende Byte (Flagbyte and 3Fh) mal.
  74.     sonst
  75.       wiederhole übernächstes Byte (256*(Flagbyte and 3Fh)+nächstes Byte) mal.
  76.   Ende, ansonsten
  77.     übernimm die nächsten Flagbyte Bytes unverändert.
  78.  
  79. Bis alle Bytes der Zeile gelesen sind.
  80.  
  81.  
  82. Beispiel:
  83.  
  84. eine Zeile (HEX):
  85.  
  86. 0011      85 00     C1 01 FF     09 FE FF 1F 7F FF AA FF FC FD     84 0F
  87.  
  88. (Länge 17 Bytes, das Längenwort wird nicht gezählt))
  89. ergibt entpackt:
  90.  
  91.           5 * 00    257 * FF        FE FF 1F 7F FF AA FF FC FD     4 * 0F
  92.  
  93. (macht 275 Bytes)
  94.  
  95.  
  96. Wenn man so sukzessive einen Puffer vollschreibt, so hat man in ihm schliess-
  97. lich die entkomprimierte Zeile stehen.
  98.  
  99. Falls ein Bild in Graudarstellung abgespeichert worden ist, stehen jetzt in
  100. jedem Byte 2 Bildpunkte à 4 Bit, zuerst Low-, dann High-Nibble, oder aber im
  101. Falle von Bildern mit 64 Graustufen ein Bildpunkt pro Byte.
  102. Bei Schwarzweiss abgespeicherten Bildern stehen 8 Bildpunkte in jedem Byte,
  103. wobei das LSB zuerst kommt, und zuletzt das MSB.
  104.  
  105.  
  106. Ab der Version 3.3 der Bilddatendateien wird ein verbessertes
  107. Kompressionsverfahren verwendet. Es handelt sich wieder um ein Lauflängen-
  108. verfahren, allerdings wird jede Lauflänge in einem Byte untergebracht, und
  109. bei Graudarstellungen wird zeilenweise jeweils ein Wertigkeitsbit gepackt.
  110.  
  111. Zunächst für Schwarzweiss:
  112.  
  113.  
  114. 1) Wort   .....  Länge der Zeile in der Bilddatendatei in Bytes oder aber
  115.                  FFFFh für Datenende (=Dateiende)
  116.                  Durch die eingefügte Längeninformation kann man schneller
  117.                  uninteressante Bildabschnitte überspringen, ohne die Zeilen
  118.                  entkomprimieren zu müssen. (z.B. bei Zoom)
  119.  
  120.  
  121. Die darauffolgenden Bytes sind wie folgt zu interpretieren:
  122.  
  123.  
  124. Bit: 76543210
  125.  
  126.      X0YYYYYY  entspricht YYYYYY Bildpunkten mit Wert X   (X=0: Schwarz)
  127.  
  128.      X10YYYYY  entspricht 64*YYYYY Bildpunkten mit Wert X (X=0: Schwarz)
  129.  
  130.      X11YZUVW  entspricht 6 Bildpunkten mit Werten X, Y, Z, U, V, W.
  131.  
  132. Beispiel:
  133.  
  134. die Bytes
  135.  
  136.      10001111 01000010 11110110 entsprechen
  137.  
  138.      16 Bildpunkten Weiß, 128 Bildpunkten Schwarz und den Bildpunkten
  139.      Weiß, Schwarz, Weiß, Weiß, Schwarz.
  140.  
  141.  
  142. Bei Graudarstellung sind zunächst in einer Bilddatenzeile die MSBs der
  143. Bildzeile gepackt, dann in der nächsten Zeile die zweithöchstwertigen Bits
  144. und so fort bis zu den LSBs.
  145. D.h. bei 4-Bit Grauwertdarstellung machen 6 Bilddatenzeilen eine Bildzeile;
  146. bei 6-Bit Graudarstellung besteht eine Bildzeile aus 6 Bilddatenzeilen.
  147. Obwohl dieses Kompressionsverfahren denkbar primitiv ist, fallen die Dateien
  148. im Schnitt um 30% kleiner aus als die mit Vers. 2.5 komprimierten.
  149.  
  150. Mit dieser Information dürfte es nicht schwierig sein, eigene Programme zum
  151. Weiterverarbeiten bzw. Umformatieren der Bilddatendateien zu schreiben.
  152.  
  153.