VOICE Homepage: http://de.os2voice.org |
[Vorherige Seite] [Nächste Seite] [Artikelübersicht] |
Von Manfred Agne ©Juni 2001 |
ImpOS/2, ein Bitmap-orientiertes Bildbearbeitungsprogramm, ist schon ein
paar Jahre verfügbar. Die immer noch aktuelle Version 2.1 datiert vom April
1998. Aber das Programmpaket enthält auch Treiber für einige SCSI-Scanner,
und diese Treiber sind von Zeit zu Zeit aktualisiert worden. Die bisher letzten
Treiber kamen im April 2001 heraus, und sind von
http://www.compart.net erhältlich.
Derzeit verwende ich Impos mit einem Flachbettscanner (Microtek ScanMaker 630)
und einem Dia-/Film-Scanner (Microtek ScanMaker 36t+). Beide sind über SCSI
angeschlossen. Der Flachbettscanner ist ein etwas älteres Modell, aber
der Diascanner ist immer noch verfügbar, zumindest in Europa.
Verglichen mit den Bildbearbeitungsprogrammen auf anderen Betriebssystemen
sieht Impos etwas betagt aus. Unter OS/2 gibt es mit Embellish und Gimp
interessante Alternativen. Aber es gibt ein Merkmal, das ich so noch in keinem
anderen Bildbearbeitungsprogramm gefunden habe:
Die meisten Funktuionen in Impos sind per REXX verfügbar. Das mag sich in einem
Bildbearbeitungsprogramm nicht sehr nützlich anhören, aber es bedeutet, daß die
Möglichkeiten von Impos einfach erweitert werden und mit denen anderer
Programme kombiniert werden können.
Vielleicht sollte ich noch erwähnen, daß Impos ein schlankes Prgramm ist.
Die aktuelle Version kommt auf CD-ROM, die eine deutsche und eine englische
Version enthält, aber sie würde auch leicht auf ein paar Floppies passen.
Trotz des geringen Platzbedarfs (sowohl im Arbeitsspeicher, als auch auf der
Festplatte) ist Impos in seinem Erscheinungsbild ausgesprochen flexibel.
Nach der Installation sieht das Programm so aus:
Abb.1: Hauptbedienungselemente
Das "Impos/2"-Fenster ist das Hauptfenster, das "Werkzeuge"-Fenster kann über
den - Button gestartet werden.
Wenn es beim Beenden von Impos noch geöffnet ist, wird es beim nächsten
Programmstart von selbst wieder geöffnet.
Abb.2: Konfiguration des Menüs
The Buttons in den Fenstern können einfach über Drag-und-Drop
umsortiert werden. Man kann sie einfach dahin ziehen, wo man sie haben
möchte - auch zwischen den Programmfestern hin und her. Jeder Button hat
ein Kontextmenü und einen Einstellungsdialog, den man darüber aufrufen
kann. Seltsamerweise kann immer nur ein solcher Einstellungsdialog gleichzeitig
geöffnet sein.
Abb.3: Zuordnung eines Befehls zum Button
Wenn man sich die Einstellungen der vordefinierten Buttons ansieht, fällt
auf, daß die Funktion, die über den Button aufgerufen wird,
geändert werden kann. Zum Beispiel hatte, nachdem ich Impos installiert
hatte, einer der Buttons zur Konvertierung der Farbtiefe (ich weiß nicht
mehr genau, welcher) die "falsche" Funktion, d.h. die Beschreibung paßte
nicht zur ausgeführten Aktion. Der Fehler war einfach zu korrigieren.
Ich mußte nur die Einstellungen so korrigieren, daß sie die
richtige Funktion aufrufen, und das war's dann auch schon. Impos ist sogar
noch flexibler: Mit der Funktion ImgExecMacro() kann ein
Impos-Button ein externes REXX-Programm aufrufen.
Hier ist ein einfaches Beispiel:
Zuerst schreiben wir uns ein REXX-Skript, z.B. D:\tmp\test.cmd:
/* REXX */ call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs' call SysLoadFuncs RC=RxMessageBox('Hello world !','','OK','EXCLAMATION') exit
Dann ziehen wir einen Button vom Einstellungsfenster auf das "Impos"- oder
"Werkzeuge" - Fenster, und konfigurieren ihn dann so, daß er das
gerade erstellte REXX-Programm aufruft:
ImgExecMacro('D:\tmp\test.cmd')
In den anderen zwei Feldern können wir eine knappe Beschreibung für
die Fly-over-Hilfe (oberes Feld), und einen längeren, ausführlicheren
Hilfetext für das Kontext-Menü eintragen, falls gewünscht. Beim
Schließen des Dialogs werden die Änderungen automatisch gespeichert.
Ein Klick auf den neu erstellten Button sollte das Programm starten.
Abb.4: Ausgabe des Beispielskripts
Natürlich ist ein "Hello world"-Tool in einem Bildbearbeitungsprogramm
nicht übermäßig nützlich. Deshalb habe ich mir gedacht,
ich sollte vielleicht etwas vorstellen, das ein bißchen interessanter
ist: Eine Routine, die für alle Bilder in einem bestimmten Verzeichnis
kleine Vorschaubilder erstellt. Für dieses nächste Beispiel werden
wir hauptsächlich die internen Bildbearbeitungsfunktionen von
Impos verwenden, die zum größten Teil über REXX verfügbar
sind.
Das REXX-Programm sieht folgendermaßen aus:
/***************************************************/ /* REXX: rescale to max. size of 300 x 300 pixels */ /***************************************************/ call RxFuncAdd 'SysLoadFuncs','RexxUtil','SysLoadFuncs' call SysLoadFuncs call RxFuncAdd 'ImgInitiate','ImpRexx','ImgInitiate' call ImgInitiate maxxy=300 sourcepath='J:\' sourcepath=DlgEntry("Sourcepath:",sourcepath, "Sourcepath:") if substr(sourcepath,length(sourcepath),1)='\' then NOP else sourcepath=sourcepath||'\' targetpath=sourcepath||'THUMBS\' call SysFileTree sourcepath||'*.JPG','bilder','F' DO i=1 to bilder.0 bild = word(bilder.i,5) thumbname = targetpath||right(bild,length(bild)-(length(sourcepath))) call SysFileTree thumbname,'result','F' if result.0=0 /* thumbnail image does not yet exist */ THEN DO numImg = ImgLoadImage(bild,FALSE) width = ImgQueryImageInfo(numImg,1) height = ImgQueryImageInfo(numImg,2) wfact = maxxy/width hfact = maxxy/height IF wfact < hfact THEN DO width = maxxy height = TRUNC(height*wfact) END ELSE DO width = TRUNC(width*hfact) height = maxxy END rc = ImgResizeImage(numImg,1,width,height,TRUE) filename = targetpath||right(bild,length(bild)-(length(sourcepath))) rc = ImgSaveImage(numImg,filename,'JPG','JPEG',FALSE) rc = ImgCloseImage(numImg) END END /***************************************************/
Zuerst werden die RexxUtil Rexx-Erweiterungen geladen. Wenn das Skript nur
aus Impos heraus gestartet werden soll, sind die Zeilen
call RxFuncAdd 'ImgInitiate','ImpRexx','ImgInitiate' call ImgInitiate
Das Programm definiert dann einen Default-Pfad für die zu konvertierenden
Dateien und öffnet einen Dialog, um dem User die Änderung dieses
Pfades zu ermöglichen. Die Vorschaubilder werden im Unterverzeichnis
'THUMBS' in diesem Pfad erstellt, und es wird davon ausgegangen, daß das
Verzeichnis existiert.
Dann sucht das Programm nach allen JPG-Dateien im Quellpfad. Für
jede gefundene Datei prüft es nach, ob schon eine entsprechende Datei in
'THUMBS' existiert. Gibt es die nicht, dann lädt das Programm das Bild,
bestimmt den Skalierungsfaktor, und skaliert das Bild. Das skalierte Bild
wird dann unter dem gleichen Namen im 'THUMBS'-Verzeichnis gespeichert.
Man beachte, daß ich keinerlei Fehlerbehandlung durchführe. Der
Quellpfad und das 'THUMBS'-Verzeichnis müssen existieren, und das
Programm kümmert sich nicht darum, ob noch ausreichend Speicherplatz
vorhanden ist. Im Grunde müßte man, woimmer ein 'RC=...'
im Code vorkommt, das Ergebnis der Funktion überprüfen und
entsprechende Fehlerbehandlung durchführen. Das bleibt dem geneigten
Leser als Übung überlassen :-))
Wenn Sie jetzt angfangen möchten, Ihre eigenen Bildbearbeitungsprogramme
für Impos zu schreiben, dann sollten Sie sich zunächst die eingebauten
Funktionen von Impos anschauen. Die sind im REXX-Programmierhandbuch
dokumentiert, das mit Impos installiert wird. Wenn Sie noch weiter gehen
möchten, kann ich die Pakete
NETPBMA und
PBMPLUS
empfehlen, die beide auf www.leo.org
erhätlich sind. Sie stellen eine große Anzahl leistungsfähiger
kommandozeilenorientierter Bildbearbeitungswerkzeuge zur Verfügung,
einige mit Funktionen, die in Impos nicht verfügbar sind. Es gibt eine
gewisse Überlappung zwischen den zwei Paketen, aber es lohnt sich, beide
zu besorgen.
Impos kann das PNM-Format lesen und schreiben, und damit ist es möglich,
per REXX mit einem einzigem Mausklick ein Bild in Impos zu speichern, ein oder
mehrere Kommandozeilenprogramme aufzurufen, die das gespeicherte Bild
bearbeiten, und das Ergebnis wieder in Impos zu laden. Wenn es mit dem Re-Import
Probleme gibt, können Sie über das TIF-Format gehen, das mit dem
PNM2TIF-Programm erzeugt werden kann, das zu den Paketen gehört.
Quellenverzeichnis:Compart: http://www.compart.net |