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