•  Back 
  •  Grundlagen des VDI 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  Help page 
  •  Show info about hypertext 
  •  View a new file 
Topic       : TOS - das Betriebssystem
Author      : 
Version     : tos.hyp (5. März 2013)
Subject     : Programmieren/Atari
Nodes       : 3001
Index Size  : 93602
HCP-Version : 5
Compiled on : Atari
@charset    : atarist
@lang       : 
@default    : Titel
@help       : 
@options    : +g -i -s +x +zz -t4
@width      : 70
View Ref-File7.2.14  Das XIMG-Format für Pixelbilder                            TOS

Pixelbilder werden unter GEM in einem Standardformat, dem sogenannten 
Bit-Image (bzw. XIMG) Format abgelegt. Grafiken dieses Typs werden 
dabei komprimiert gespeichert, und besitzen immer das Suffix '.IMG'.

Der Hauptvorteil dieses Formats liegt in der Tatsache begründet, daß 
es sich um ein GEM-Standardformat handelt, welches daher von nahezu 
allen Applikationen unterstützt wird. Eine Bit-Image-Datei besteht aus 
einem Header, sowie den reinen Pixeldaten. Der Header ist dabei in C- 
Notation wie folgt definiert:

typedef struct
{
  int16_t version;           /* Versionsnummer (meist 1)                 */
  int16_t headlen;           /* Länge des Kopfes in 16-Bit Worten        */
  int16_t planes;            /* Anzahl der Farbebenen der Grafik         */
  int16_t pat_run;           /* Musterlänge in Bytes                     */
  int16_t pix_width;         /* Pixelbreite des Quellgerätes in 1/1000mm */
  int16_t pix_height;        /* Pixelhöhe des Quellgerätes in 1/1000mm   */
  int16_t sl_width;          /* Breite einer Scan-Zeile in Pixeln        */
  int16_t sl_height;         /* Höhe einer Scan-Zeile in Pixeln          */
  int8_t  x_id[4];           /* muss 'XIMG' sein                         */
  int16_t color_model;       /* Farbmodell: 0=RGB, 1=CYM, 2=Pantone      */
  RGB_LIST color_table[]; /* Farbtabelle */
} XIMG;

Der gesamte Header liegt dabei im Motorola-68000-Format vor, so daß er 
auf einem Rechnern mit Intel-CPU wort- bzw. langwortweise gedreht 
werden muss. Die reinen Pixeldaten beginnen immer bei headlen * 2 und 
sind (wie bereits erwähnt) komprimiert abgelegt.

Die Länge der Muster liegt zwischen 1 und 8, und beträgt bei den 
meisten Bildschirmen 2 Bytes. Jede Scan-Zeilen-Information setzt sich 
aus zwei Komponenten zusammen:

   ∙ einem Wiederholungsteil folgender Struktur (in C-Notation):

     typedef struct
     {
       int16_t sc_zero;    /* immer Null */
       int8_t  sc_ff;      /* immer 255  */
       int8_t  sc_cnt;     /* Anzahl der codierten Bildzeilen */
     } SCANLINE;

   ∙ der eigentlichen Bildinformation. Diese wird in drei 
     verschiedenen Kategorien zeilenweise abgespeichert.

      (a) einfarbige Pixelfolgen (Solid-Runs) werden als einfaches 
        Byte gespeichert, wobei das oberste Bit den Status des Punktes 
        bestimmt (also 'an' oder 'aus'). Die restlichen sieben Bits 
        teilen mit, wie viele Bytes ausgegeben werden müssen.

      (b) Musterfolgen (Pattern-Runs) haben als erstes Byte die 0, und 
        als zweites die Anzahl der Musterwiederholungen. Die 
        Musterlänge steht im Header unter pat_run. Es folgen den 
        ersten beiden Bytes also genau so viele Bytes, wie benötigt 
        werden, um das Muster darzustellen.

        typedef struct
        {
          int8_t pr_zero;        /* immer Null       */
          int8_t pr_cnt;         /* Anzahl der Bytes */
          int8_t pr_data[...];   /* Musterdaten      */
        } PATTERNRUN;

      c) Schlecht, oder nicht verkürzbare Bildinformation (Bit- 
        Strings) wird unverändert abgespeichert. Hier steht als erstes 
        Byte eine 0x80 und als zweites die Anzahl der Bytes. Danach 
        folgen dann die entsprechenden Bytes mit der unkomprimierten 
        Bildinformation.

        typedef struct
        {
          int8_t bs_first;       /* immer 0x80       */
          int8_t bs_cnt;         /* Anzahl der Bytes */
          int8_t bs_data[...];   /* Bilddaten        */
        } BITSTRING;

Es folgen jeweils die Bildinformationen für jede codierte Farbebene 
direkt hintereinander. Man sollte auch darauf achten, daß immer eine 
Zeile mit voller Bytezahl codiert wird, auch wenn das Bild effektiv 
schmaler ist. Es können also bis zu sieben Bits überflüssiger 
Information vorliegen. Die Pixelbreite des Bildes steht im Header 
unter sl_width.

Querverweis: Metafile-Format   v_bit_image   OUT-Dateiformat