home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ST-Computer Leser 2002 January
/
STC_CD_01_2002.iso
/
UTILS
/
LIBERTY
/
DEVELOP
/
IBMR.H
next >
Wrap
C/C++ Source or Header
|
1997-12-20
|
6KB
|
151 lines
/* Hauptverarbeitungsbildtypen *
*******************************
* RASTERGRAFIKEN *
* Da sich Plane-orinetierte Bitmap-Grafiken ganz schlecht
* und nur langsam weiterverabeiten lassen wurde ein eigenes
* Format für die Verarbeitungen gewählt. Aber keine Angst,
* entsprechende Konvertierungsfunktionen sind integriert.
* Dieses Format hat auch den gro₧en Vorteil das es oft
* schon dem geräteabhängigem Format von Grafikkarten ent-
* spricht.
* Man hat höchste Geschwindigkeit, da man sich eine Umwandlung
* via VDI-Transform ersparen kann !
* Die Umsetzung dieses Formates in das geräteabhängige Format
* wird durch eigene, hochoptimierte Algorithmen übernommen und
* eine entsprechende Funktion zur Verfügung gestellt.
*/
#include <portab.h>
#ifndef _GEN_IBMR_
#define _GEN_IBMR_
#ifndef BOOLEAN
typedef enum
{
FAIL=-1,
FALSE,
TRUE
} boolean;
#define BOOLEAN boolean
#endif
typedef struct
{
WORD red; /* Rot-Intensität in Promille (0-1000) */
WORD green; /* Grün-Intensität in Promille (0-1000) */
WORD blue; /* Blau-Intensität in Promille (0-1000) */
} RGB1000; /* Farben VDI kompatibel */
#define RGB255 BYTE /* Genau: Eine Folge von 3 Bytes:
BYTE red; Rotintensität von 0-255
BYTE green; Grünintensität von 0-255
BYTE blue; Blauintensität von 0-255
Leider ist das Beschreiben einer Struktur
hier nicht möglich, da PureC automatisch
diese auf 16 Bit 'alignen' würde, welches
zu Verarbeitungsmängeln im 68000 Code führt..
*/
typedef struct {
/* Viele (ableitbare) Informationen... */
/* spart aber Zeit und wir wollen doch */
/* Speeeeeed...... */
WORD xsize; /* Bildbreite */
WORD ysize; /* Bildhöhe */
WORD wdwidth; /* Breite/16 (aligned) */
BYTE bpp; /* Bytes pro Pixel (monochrome = -8) */
WORD bpl; /* Bytes pro Zeile */
WORD dumb; /* Anzahl der für align. unbenutzten Bytes */
LONG bpb; /* Speicherbedarf der Bilddaten in Bytes */
BYTE cdepth; /* Farbtiefe (2^n Farben). */
WORD colors; /* Wenn Farbtiefe <= 8: genaue Farbanzahl */
/* sonst -1 für keine Palette. */
RGB255 *cmap; /* Zeiger auf eine Farbtabelle */
BYTE *bitmap; /* Die Bilddaten.
* Folgender Aufbau:
*
* Wenn cdepth=1 ist (monochrome),
* sind 16 pixel wordäquivalent (und aligned).
* Das höchste Bit steht an linker Position.
* Die Farbzuordnung ist: Bit leer = Index 0
* Bit gesetzt = Farbindex 1 der akt. cmap.
* Bilddaten sind WORD aligned.
*
* Wenn cdepth=2-8 ist, sind die
* Bilddaten pixelgepakt farb-indiziert
* bezgl. der Farbtabelle.
* 1 Pixel = 1 Byte.
*
* Wenn cdepth=16 ist, liegt 16 Bit High-
* Color vor. 2 Byte pro Pixel Motorola-Format:
* even | odd
* rrrrrggg gggbbbbb
*
* Wenn cdepth=24 ist, liegt 24 Bit True-
* Color vor. 3 Byte pro Pixel, Intel-Format:
* first | second | third
* bbbbbbbb gggggggg rrrrrrrr
*
* Die 'eigentuemiliche' Zahlenformat-
* kombination ist ein Zugeständnis an
* die Hardware des Falcon030 !
* Da es aber von ATARI keine 24bit Grafik
* gibt und Grafikkarten 'normalerweise' ;-)
* das Intelzahlenformat benutzen, wurde
* dieses aus Geschwindigkeitsgründen bei
* True-Color gewählt.
*
* WICHTIG !!!
* Alle Zeilen sind 16 Pixel-Aligned! Auch
* wenn dieses ab 8 Bildebenen unsinnig
* klingen mag, es ist von Vorteil, da so
* oft 'automatisch' das geräteabhängige
* Format von Grafikkarten vorliegt.
* Das spart bei der Konvertierung viel
* Zeit. (Auch wenn es etwas zu Lasten
* des Verarbeitungskomforts und Speicher-
* bedarfs geht..)
*/
} IBMR; /* Internal BitMap Representation */
/* VEKTORGRAFIK *
*
* GEM-Metafiles haben drei Nachteile bei der Ausgabe via VDI die
* mit dem 'Compact-VDI'-Format beseitigt werden:
* - alle Werte liegen im Intel-Zahlenformat vor
* - Funktionsnummer treten auf, die nicht vom Bildschirmtreiber
* verstanden werden (Sub-Objekte etc.)
* - Punkte müssen ziemlich umständlich durch Befehlsinterpretation
* auf ihre Zieldimension umgerechnet werden.
*
* Das CVDI-Dateiformat hat folgenden Aufbau (alle Zahlen im
* Motorola-Format!!!):
*/
typedef struct _cvdi_
{
LONG identifier; /* 'CVDI' */
WORD headlen; /* Headerlänge / Versionserkennung (1.0 = 60 Bytes) */
BYTE name[14]; /* Name der Grafik (nullterminierter String) */
struct _cvdi_ *next; /* Nächste Grafik oder NULL */
WORD xsize; /* Breite der Grafik */
WORD ysize; /* Höhe der Grafik */
LONG spcoffset; /* Byte-Offset zu den Weiten/Höheninformationen... */
LONG spccount; /* Anzahl der Special-!WORDS! */
LONG ptscount; /* Anzahl der Punkte (x,y = 2!!) */
WORD *userlistcolor; /* Programmspezifische Zeiger zu spez. Infos... */
WORD *userlistpattern;
WORD *userlistfonttype;
WORD *userlistfontsize;
WORD *userlistfree;
/*WORD graphic[...] Vektorgrafikdaten */
} CVDI; /* Compact-Vector-DescriptIon (oder Chriskers-VDI ;-) ) */
#endif