VOICE Homepage: http://de.os2voice.org | Juli 2001 [Newsletter Inhalt] [Vorherige Seite] [Nächste Seite] [Artikelübersicht] editor@os2voice.org

##
ImpOS/2 neu betrachtet

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

nicht notwendig. Ich habe sie eingefügt, damit ich das REXX-Skript auch von einem WPS-Programmobjekt aus starten kann.

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 PNMPLUS: ftp://ftp.leo.org/pub/comp/os/os2/leo/graphics/pbmplus.zip NETPBMA: ftp://ftp.leo.org/pub/comp/os/os2/leo/graphics/netpbma.zip

Artikelübersicht
editor@os2voice.org
[Vorherige Seite ] [Inhalt] [Nächste Seite ]
VOICE Homepage: http://de.os2voice.org