   ******************************
 ****                          ****
*****   TURN_IMG Version 1.2   *****
 ****                          ****
   ******************************


********************************
*                              *
*    Eine kurze Anleitung      *
*                              *
*        07.09.92              *
*                              *
********************************

Hallo !!

Mir ist aufgefallen, daž keines meiner Graphikprogramme in der Lage
ist, ein komplettes Bild um 90 Grad zu drehen. Wenn man nun ein Bild
im Querformat hat, dieses aber in seine (meist im Din A4 Format) ge-
schriebene Arbeit im Hochformat einbinden will, steht man auf dem
Schlauch (das war jedenfalls bei mir der Ausl”ser zu diesem Utility).
Also habe ich mich hingesetzt und dieses kleine Programm geschrieben, 
das ein Bild im GEM-IMG Format um 90, 180 oder 270 Grad drehen kann.


Der Aufruf erfolgt mit "turn_img [rotation] input[.img] output[.img]".
Der Parameter 'rotation' kann dabei 1, 2 oder 3 sein.  1 bedeutet eine
Drehung um 90 Grad (im mathematisch positiven Sinne, also gegen den
Uhrzeigersinn), 2 eine Drehung um 180 Grad, 3 eine Drehung um 
270 Grad. Wird keine Rotation angegeben,  nimmt das Programm eine
Drehung um 90 Grad vor. Aužerdem ist es noch m”glich, als Rotations-
parameter eine 0 anzugeben. In diesem Fall wird das Bild nur ent-
packt und wieder gepackt. Da mein Packalgorithmus alle drei m”glichen
Packformen neben dem 'BITSTRING' benutzt, also 'VERTICAL REPLICATION
COUNT', 'SOLID RUN' und 'PATTERN RUN' (mit 2 Byte Patternl„nge) ist
die Komprimierung recht brauchbar, jedenfalls besser als bei vielen
anderen Programmen, die ich so kenne (mit Aužnahme von ARABESK - wenn
ich nur wžte, was die anders machen als ich !?). Eventuell kann man
jedenfalls durch die Angabe der 0 ein paar Bytes sparen.
Die Namen des Input- bzw. Outputfiles k”nnen mit oder ohne Extension
(.IMG) angegeben werden.
Ein Aufruf ohne Parameter bringt eine kurze `Usage'-Meldung auf den 
Schirm.

Nach dem Aufruf meldet sich das Programm mit seiner Versionsnummer.
Danach wird der Name des Inputfiles angegeben, das Programm liest den
Dateiheader und gibt einige Angaben aus (Filegr”že, Anzahl der Pixel
horizontal und vertikal, Gr”že des Bildes, Punktaufl”sung horizontal
und vertikal). Die Datei wird nun eingelesen und dekomprimiert, 
anschliežend beginnt das Rotieren. Um anzuzeigen, daž sich auch
tats„chlich etwas tut, erscheint hinter der Meldung 'Rotating...'
immer, wenn wieder 64 Bildzeilen rotiert wurden, ein weiterer Punkt.
Nach beendeter Rotation wwerden die Bilddaten ins Outputfile geschrie-
ben. Das Programm meldet Namen und Gr”že dieser Datei und verabschie-
det sich. Bei Problemen meldet sich das Programm (hoffentlich) mit
einer Fehlermeldung und bricht ab. Existiert die Outputdatei bereits, 
wird nachgefragt, ob diese Datei berschrieben werden soll, ansonsten
wird das Programm abgebrochen.

TURN_IMG l„uft meines Wissens auf jeden ATARI, auf dem TT l„dt es sich
ins Fast-RAM und alloziert auch dort den Speicher. Apropos Speicher:
Das Programm selber ist, wie man sieht, recht klein. Abh„ngig von der
Bildgr”že wird jedoch ordentlich Speicher alloziert, n„mlich zwei mal
Pixel horizontal * Pixel vertikal Bits, beide Werte jeweils auf ein 
volles Byte aufgerundet. Hinzu kommen noch zwei Felder von Pointern
auf die jeweiligen Bildzeilenanf„nge (das spart eine Menge Multipli-
kationen und macht die Sache deutlich schneller). 

Zum Thema Geschwindigkeit: Das Programm ist in (Pure-) C geschrieben
und benutzt soweit m”glich Register-Variablen. Dennoch ist die Opti-
mierung noch nicht bis zum letzten getrieben. Dafr befindet sich
der Source-Code wenigstens noch in einem servicefreundlichen Zustand.
Ein wirklich grožes Bild kann also schon ein Weilchen dauern, z.B.
braucht die Drehung eines etwa 1500 mal 2400 Pixel grožen Bildes auf
meinem Mega ST ungef„hr 3 Minuten.
Sollte ich ein gr”žeres Interesse an TURN_IMG feststellen,oder wenn
ich mal Zeit und Lust haben sollte, mache ich mich an ein paar Ver-
besserungen. Ich denke dabei an eine GEM-Oberfl„che, eventuell mit
einer Anzeige des Bildes in Fenstern, oder eine Geschwindigkeits-
optimierung durch Assemblerroutinen.

So, genug des grausamen Spiels.
Wenn mir irgendjemand etwas schreiben m”chte zu TURN_IMG, Anregungen,
Beschimpfungen, konstruktive und destruktive Kritik, (berschweng-
liche) Danksagungen, so wende er sich an folgende Adresse:

Christian Lunau
Lderitzstraže 11
4630 Bochum 1

Es folgt der bliche Disclaimer:
Ich habe dieses Programm sorgf„ltig geschrieben und geprft. Ich ber-
nehme jedoch keinerlei irgendwie geartete Garantie, sollte es durch
mein Programm zu irgendwelchen Datenverlusten oder sonstigen
"Unf„llen" kommen. Der Benutzer ist - wie blich - wieder mal selber
schuld.

TURN_IMG ist PUBLIC DOMAIN, ich bitte darum, das Programm zusammen mit
dieser README-Datei weiterzugeben.

                                Viel Spaž !!!



Bochum, dem 07.09.92                   Christian Lunau
