PRO CONVERT_TO_TIFF, fileName, XSIZE=xSize, YSIZE=ySize, ROTATE=angle, $ SKIP_TO_IMAGE=skip_to_image, $ RECORD=record_Size, LENGTH=image_Length ;=============================================================================== ; (c) 1990 - khd c/o FU BERLIN. A l l r i g h t s r e s e r v e d. || ; -- No part of this software package may be reproduced, transmitted, || ; 1991 transcribed, stored in a retrieval system, or translated into || ; any form by any means without the w r i t t e n permission of || ; Karl-Heinz Dittberner-FU BERLIN, Arnimallee 22, D-1000 Berlin 33 || ;=============================================================================== ; PRO:CONVERT_TO_TIFF.PRO K.-H. Dittberner - 17.NOV.1990 ; V 01.7 P 476/19 - 28.JAN.1991 ; ; IDL(V2.0)-Routine: Lesen einer binaeren Bild-File, die mehrere (!) Bilder ; enthalten kann, und Konvertierung in das TIFF-Format. ; ; HINWEIS: Diese Prozedur wurde insbesondere fuer Bild-Files im so- ; genannten LIPS-Format der DFVLR, Oberpfaffenhofen, wie ; sie deren DIT-Programm (Disk to Tape) produziert, ent- ; wickelt. CONVERT_TO_TIFF ist aber auch fuer andere ; binaere Bild-Files verwendbar, wenn die dafuer erforder- ; lichen Parameter (siehe z.B. die Keywords RECORD und ; LENGTH) entsprechend gesetzt werden. ; ; Das Tape mit den binaeren Bild-Files muss vor Benutzung ; dieser Prozedur auf eine VAX-Disk (Files-11) eingespielt ; werden; z.B. mit: ; ; o Auf Knoten VAXUS des HAIRclusters einloggen. ; o Tape ins KENNEDY-9610 einlegen und laden (LOAD). ; o Am KENNEDY-9610 die Density auf 1600 bpi einstellen. ; o Das Tape-Laufwerk auf ON-LINE stellen; dann eingeben: ; ; > MOUNT/FOREIGN/BLOCKSIZE=4096/RECORDSIZE=512 TAPE: ; > COPY/LOG TAPE:*.*;* dev:BILDER. /CONCAT ; > Y (Falls keine EOF-Marke auf dem Tape!) ; > DISMOUNT TAPE: ; > LOGOUT ; ; Quelle: Do-it-yourself! Merkposten: o Ggfs. /EPS zufuegen ? ; C90 238 o ; o Start erst beim i. Bild. ; Aufruf: CONVERT_TO_TIFF, "dev:BILDER.", o ; ROTATE=180 [, ...] o XSIZE, YSIZE Defaultwerte Ok ? ; o Input-File am Schluss loeschen ? ;=============================================================================== ; Aenderungen: [20/11/90-khd] => V 01.3: (Copy => SEIDLER + DK) ; - Defaultwerte eingefuehrt: ; XSIZE=256 pixel, YSIZE=384 pixel. ; - Kommentierung zugefuegt. ; [20/11/90-khd] => V 01.4: (Copy => SEIDLER) ; - ImageLength=512 => 520 pixel erhoeht; ; sonst beim Lesen Ueberlappung der Bilder. ; [27/11/90-khd] => V 01.5: (Copy => AG GRUE + AG KOE) ; - Beim Aufruf von TRIM_IMAGE in Pkt.3 /FIX zugefuegt. ; Dazu ist TRIM_IMAGE.PRO-V01.8ff erforderlich. ; - ON_ERROR,2 aktiviert. ; - Keywords RECORD und LENGTH eingefuehrt. ; [17/1/91-khd] => V 01.6: ; - Nunmehr werden die TIFF-Files im DIR abgelegt aus dem die ; Input-Files stammt. ; [28/1/91-khd] => V 01.7: (Copy => SEIDLER) ; - Keyword SKIP_TO_IMAGE vorbereitet. ; - Bedeutung vom Keyword ROTATE umgestellt auf mehrere ; Rotationsmoeglichkeiten (0, 90, 180, 270 Grad). ; - WDELETE in Pkt.3 zum Loeschen des zuletzt in TRIM_IMAGE ; erzeugten IDL-Windows zugefuegt. ;=============================================================================== ; 0. Prolog, Variablen und Konstanten: ;=============================================================================== ; ON_ERROR, 2 ; Return => Ruf. Programm. ON_IOERROR, IO_Error Norm = 256 answer = "" ; Typ-Deklaration. fileName = STRUPCASE(fileName) cutLen = STRPOS(fileName, ":") cutLen = LONG(cutLen(0)) device = STRMID(fileName, 0, cutLen) ;;PRINT, "o Device: ", device ; ;=============================================================================== ; 1. Behandlung der Keywords (Default-Werte): ;=============================================================================== ; IF KEYWORD_SET(angle) $ THEN BEGIN CASE angle OF 0: anr = 0 90: anr = 1 180: anr = 2 270: anr = 3 ELSE: anr = 2 ENDCASE ENDIF IF NOT KEYWORD_SET(record_Size) $ THEN RecordSize = 512 $ ; Bytes. ELSE RecordSize = record_Size ImageWidth = RecordSize IF NOT KEYWORD_SET(image_Length) $ THEN ImageLength = 520 $ ; pixel. ELSE ImageLength = image_Length IF NOT KEYWORD_SET(xSize) THEN xSize = Norm IF NOT KEYWORD_SET(ySize) THEN ySize = 3*Norm/2 ; ;=============================================================================== ; 2. Datei-Zuordnung: ;=============================================================================== ; OPENR, BildDaten, fileName, RecordSize, /GET_LUN ; Oeffnen der Bild- ; daten-File. image = ASSOC(BildDaten, BYTARR(ImageWidth,ImageLength)) ; Deklaration der ; ; File-Struktur. ;=============================================================================== ; 3. Lesen der Bilddaten und Bildausschnitt interaktiv festlegen: ;=============================================================================== ; i = 0L ; Image-Counter. WHILE NOT EOF(BildDaten) DO $ BEGIN IF KEYWORD_SET(angle) $ THEN bild = ROTATE(image(i), anr) $ ; Bild um anr*90 Grad drehen. ELSE bild = image(i) ; i. Bild aus der File lesen. TRIM_IMAGE, bild, XSIZE=xSize, $ ; Bildausschnitt interaktiv YSIZE=ySize, /FIX ; per Maus produzieren. PRINT, FORMAT='($, "o Wie heisst das Bild ? [BILD]")' READ, answer answer = STRUPCASE( answer) IF (answer EQ "") $ THEN TIF_fileName = device + ":" + "BILD.TIF" $ ELSE BEGIN TIF_fileName = device + ":" + answer + ".TIF" ENDELSE TIFF_WRITE, bild, TIF_fileName, $ ; Konvertierung in eine Bild- ORIENTATION=0 ; File im TIFF-Format. WDELETE ; Letztes IDL-Window loeschen. i = i + 1L ; Naechstes Bild. ENDWHILE GOTO, Ende ; ;=============================================================================== ; 4. Schluss: ;=============================================================================== ; IO_Error: ON_IOERROR, NULL PRINT, !ERR_STRING Ende: FREE_LUN, BildDaten ; Schliessen der Bilddaten-File. END ;===============================================================================