NVDI Rasterkit vom 26.2.97
==========================

Haftung

Trotz sorgfltiger Entwicklung und umfangreicher Tests knnen wir keine Gewhr 
bernehmen, da die Software und die beiliegenden Quelltexte unterbrechungs-
und fehlerfrei laufen. Die Haftung fr unmittelbare Schden, Folgeschden
und Drittschden ist ausgeschlossen!

Bedienung

Ein oder mehrere ESM-Bilder (24 Bit RGB) auf die Demoprogramme TSTFLOYD.PRG oder 
TSTDITHR.PRG ziehen.

Weitergabe

Das Rasterkit ist ein Teil der NVDI-Dokumentation. Die in diesem Ordner
befindlichen Dateien drfen frei kopiert und weitergegeben werden. In jedem
Fall mssen aber alle in diesem Ordner vorhandenen Dateien (insbesondere
die Datei README.TXT) komplett und unverndert weitergegeben werden.

Es ist erlaubt und ausdrcklich erwnscht, da die Beispielquellen als
Grundlage fr Rasterwandlung in eigenen Programmen benutzt werden!



Anmerkungen zu den Sourcen
==========================
- Alle Dateien aus dem Ordner INCLUDE gehren in den INCLUDE-Ordner
  des Compilers.

- "Types2B.h" ist die Header-Datei mit den Datentypdefinitionen


COLMAP_G.C:

 - es wird davon ausgegangen, da vq_scrninfo() vorhanden ist,
   eine Abfrage mu noch eingebaut werden. Diese Funktion
   ist ab NVDI 2.5, NOVA-VDI 2.6x und dem VDI-Enhancer (EdDI 1.0
   - Freeware) verfgbar.

 - Durch die Invers-Colormap-Routine kann mit nahezu jeder Palette
   gearbeitet werden. Um gute Resultate zu erreichen, sollte aber eine
   Palette vorhanden sein, die den RGB-Farbraum abdeckt. Neben der 
   NVDI_NEU.PAL funktionien auch die Dither-Paletten von Gemview, CAB,
   Calamus oder 1st-Guide gut.
   
TESTDIT2.C:

 - Es knnen nur ESM-Bilder mit 24 Bit RGB geladen werden.
 - mit USE_FLOYD kann eingestellt werden, ob Floyd-Steinberg
   oder Ordered Dither zum Darstellen benutzt wird
 - mit USE_DEFAULT_COLORS wird die neue Standardpalette (siehe
   "Anmerkungen zur Farbpalette") gesetzt
 - Der Schalter DITHER_SINGLE_LINES legt fest, ob das gesamte Bild 
   gedithert, transformiert und anschlieend ausgegeben wird 
   (DITHER_SINGLE_LINES ist 0) oder ob Zeile fr Zeile gedithert, 
   transformiert und ausgegeben wird (DITHER_SINGLE_LINES ist 1).
   In letzterem Fall wird das der Funktion show_image() bregebene 
   Quellbild nicht zerstrt, in ersterem wird es berschrieben, da der 
   Bildspeicher als Puffer fr die Wandlung benutzt wird.   

CFLOYD_G.C:
DITHER_G.C:
 - Die Routinen <do_floyd()> und <do_dither()> wandeln jetzt auch
   Farbbilder in Schwarzweibilder um. Die Umrechnung der Farbwerte
   in einen Grauwert erfolgt dabei nach CCIR 709
   (ungefhr: Grau = 0.33 * R + 0.60 * G + 0.07 * B ).

 - Wer eine Bitmap dithern mchte, die 256 Farben enthlt (um sie z.B. in 16 
   Farben anzuzeigen), sollte zur Anzeige das Bild ber einen kleinen
   Buffer scheibchenweise in xRGB-Pixel wandeln. Eine Wandelfunktion she dann
   wie folgt aus:
   
void  von_8_bit_zu_xRGB( uint8 *src, int32 *buf, int16 xmax, int16 ymax, 
                         COLOR_ENTRY *src_colors )
{   
   int16 x;
   int16 y; 

   for ( y = 0; y <= ymax; y++ )
   {
      for ( x = 0; x <= xmax; x++ )
      {
         uint8    index;
         int32    red;
         int32    green;
         int32    blue;
    
         index = *src++;                                       /* 8-Bit-Pixel einlesen */
   
         red = src_colors[index].rgb.red >> 8;                 /* Farbwert auslesen */
         green = src_colors[index].rgb.green >> 8;             /* und durch 256 teilen */
         blue = src_colors[index].rgb.blue >> 8;
      
         *buf++ = ( red << 16 ) | ( green << 8 ) | blue;       /* xRGB-Pixel ausgeben */
      }
      /* hier mu ggf. noch
      
      src += src_offset;
      buf += buf_offset;
      
      addiert werden, um in die nchste Zeile zu kommen. */
   }
}
  
   <src_colors> zeigt auf die Farbtabelle des Quellbilds, wobei obiger Code 
   davon ausgeht, da die RGB-Werte 16bittig sind (0 <= rgb <= 65535).
   
EDDILIB.C:
 - zustzliche VDI-Funktionen

Anmerkungen zur Farbpalette
===========================
Im Source kann per Compilerdirektive eine Palette gesetzt werden,
welche die nchsten NVDI-Version default-mig setzen wird.

Diese Palette zeichnet sich gegenber der (zur Abschreckung bei-
liegenden) ATARI-Palette durch folgende Eigenschaften aus:

- Systemfarben sind nicht voll aufgerissen, wodurch z.B. Grn als
  Hintergrundfarbe wieder einsetzbar wird.

- Die 16 Systemfarben sind so gesetzt, da man damit einen vernnftigen
  Floyd-Steinberg-Dither durchfhren kann (mit der ATARI-Palette grauen
  Bilder aus, da die ATARI-Grauwerte aufgrund der Lage innerhalb des 
  Farbwrfels bevorzugt verwendet werden). Einfach mal mit den 
  beiliegenden ESM-Dateien testen, indem die Farbindizes 16 - 255 im
  beiliegenden COLOR.CPX auf wei gesetzt werden ...
  
- Die statischen Farben der Windows-Farbpalette wurden bercksichtigt,
  wodurch Farbverflschungen bei den brigen Farben verhindert werden.
  
- Die Palette enthlt ansprechende Selektionsfarben fr die XOR-
  Verknpfung (siehe z.B. Popup in MagiC-Dateiauswahl oder im
  Desktop).
  
- Die Palette deckt den gesamten RGB-Farbraum und nicht nur die
  Auenflchen des RGB-Wrfels ab, was Farbsprnge bei der Fehler-
  verteilung vermeidet.
  
Anmerkungen zu Pure Pascal
==========================
Um den Assemblerfile TRNSFM.S problemlos unter Pure Pascal zu nutzen,
mssen die im BSS-Segment definierten Felder t8ip4_tab und t8ip8_tab
im Pascal-Programm definiert werden:

VAR   t8ip4_tab : ARRAY of LONGINT[16];
      t8ip8_tab : ARRAY of LONGINT[2*256];

Am Anfang des Assemblerfiles TRNSFM.S mssen beide dann mit

                  IMPORT   t8ip4_tab
                  IMPORT   t8ip8_tab
 
importiert werden. Das BSS-Segment (die letzten fnf Zeile vor 'END')
kann dann gelscht werden.
               
Changes/korrigierte Fehler
==========================

TESTDIT1.C:
-  Probleme mit falschem VDI-Handle auf Nova-Grafikkarten behoben

COLMAP_G.C:
-  VGA-Modi mit 16-Farben-VGA-Modus werden erkannt

TRNSFM.S:
-  Speicherschieer bei 16-Farb-VGA-Modus entfernt.
-  Wandlung von 8 Bit auf 1 Bit korrigiert.
-  Wandlungsroutine fr 8 Farben (Druckausgabe) umgeschrieben, um Probleme bei 
   gleicher Bufferadresse zu beheben.
-  Die Wandlungstabellen t8ip4_tab und t8ip8_tab werden wegen Pure Pascal nicht 
   mehr PC-relativ adressiert.

CFLOYD_G.C:
-  Routine fr Darstellung auf Schwarzwei-Bildschirmen eingebaut.

DITHER_G.C
-  Das Zielrechteck wird bergeben, um bei Ausgabe von Einzelzeilen die richtige 
   Position in der Dithermatrix anzusprechen.
-  Ditherfunktion fr Darstellung auf Schwarzwei-Bildschirmen eingebaut.


