>I'm afraid BMP is far newer than the earliest digital graphic programs as well. I was
>using Binuscan along side of Photoshop 2 for awhile, for example; BMP won't help if it's
>a later development. The QuickTake only works with Apple Software on OS.7.5,
>where's BMP for that?
I do not understand this statement. BMP is far older than the Camera. Photoshop 3 was out long before the camera, and has the ability to "Save As" BMP. Also, according to some websites, the QuickTake works with release 9 for Apple. I do not know much about apple OS's, but found a site that stated the CODEC was still in OS 9.
BMP is very easy to generate once an image is in memory.
PROGRAM CVTKC2
IMPLICIT NONE
CHARACTER* 80 FILE
INTEGER* 2 COLUMS, ROWS
INTEGER* 4 IMGBGN, PIXELS
PARAMETER ( COLUMS= 1536, ROWS= 1024)
PARAMETER ( PIXELS= 1536* 1024, IMGBGN= Z'13800')
C+++ BEGIN / CMBMP/
C WINDOWS BITMAP HEADER FILE.
INTEGER* 2 FLTYPE
INTEGER* 4 FILESZ, RSVD1, OFFSET, HDRSIZ, IWIDTH, IHEIGHT
INTEGER* 2 CLRPLN, BITPXL
INTEGER* 4 COMPRESS, IMGSIZE, HRES, VRES, CLRINDEX, CLRUSED
LOGICAL* 1 PALETTE
COMMON/ CMBMP/ FLTYPE,
1 FILESZ, RSVD1, OFFSET, HDRSIZ, IWIDTH, IHEIGHT,
2 CLRPLN, BITPXL,
3 COMPRESS, IMGSIZE, HRES, VRES, CLRINDEX, CLRUSED,
4 PALETTE( 4, 0: 255)
CHARACTER* 2 FILETYPE
EQUIVALENCE ( FLTYPE, FILETYPE)
C--- END / CMBMP/
C+++ BEGIN / CMLUNM/
INTEGER* 2 LUINPT, LUOUT, LULIST
COMMON/ CMLUNM/ LUINPT, LUIN, LULIST
C--- END / CMLUNM/
C+++ BEGIN DOS I/O FUNCTION CODES.
C FILE I/O PARAMETERS AND CODES.
INTEGER* 2 CRTNRM, CRTRD, CRTHDN, CRTSYS
INTEGER* 2 OPNRD, OPNWRT, OPNRDW
INTEGER* 2 FRMBGN, FRMCRN, FRMEND
INTEGER* 2 BADFIL, NORMAL
PARAMETER ( CRTNRM= 0, CRTRD= 1, CRTHDN= 2, CRTSYS= 3)
PARAMETER ( OPNRD= 0, OPNWRT= 1, OPNRDW= 2)
PARAMETER ( FRMBGN= 0, FRMCRN= 1, FRMEND= 2)
PARAMETER ( BADFIL= 0, NORMAL= -1)
C--- END DOS I/O FUNCTION CODES.
C LOCAL STUFF.
CHARACTER* 60 PATH
INTEGER* 2 GREY, I, J, K, LENGTH
INTEGER* 2 STATUS, BYTES, PATHLN
LOGICAL* 1 GREYVLU( 2)
EQUIVALENCE ( GREY, GREYVLU( 1))
CHARACTER* 80 STRING, FLNAME
INTEGER* 4 ROWIN, ROWOUT, POSITN
LOGICAL* 1 SCANLINE( 8192)
INTEGER* 2 PXLROW( 4096)
EQUIVALENCE ( PXLROW, SCANLINE)
C EXTERNALS.
INTEGER* 4 LOC
INTEGER* 2 FILOPN, FILCRT, FILCLS, READF, WRITEF, READS, WRITES
INTEGER* 4 MVFLPT
INTEGER* 4 UNSIGN
INTEGER* 2 STRLEN, IEOR, IAND, IOR, FILENG, EXCUTE
CHARACTER* 1 UPCASE
WRITE( *, *) 'PATH TO DCS200 FILES: '
READ( *, 200) PATH
200 FORMAT( A)
PATHLN= STRLEN( PATH)
IF( PATHLN .GT. 0) THEN
IF( PATH( PATHLN: PATHLN) .NE. '\') THEN
PATHLN= PATHLN+ 1
PATH( PATHLN: PATHLN)= '\'
END IF
WRITE( STRING, 400) PATH( 1: PATHLN)
400 FORMAT( 'DIR/B ', A, '*.KC2>TEMPKC2.DAT')
ELSE
STRING= 'DIR/B *.KC2>TEMPKC2.DAT'
END IF
I= STRLEN( STRING)
STATUS= EXCUTE( STRING( 1: I))
LULIST= 1
OPEN( UNIT= LULIST, FILE= 'TEMPKC2.DAT', STATUS= 'OLD')
1010 CONTINUE
READ( LULIST, 300, END= 1000) FLNAME
300 FORMAT( A)
LENGTH= STRLEN( FLNAME)
C OPEN THE INPUT FILE.
IF( PATHLN .GT. 0) THEN
STRING= PATH( 1: PATHLN)// FLNAME( 1: LENGTH)
WRITE( *, *) STRING
ELSE
STRING= FLNAME( 1: LENGTH)
END IF
LENGTH= STRLEN( STRING)
WRITE( *, *) STRING( 1: LENGTH)
LUINPT= FILOPN( STRING( 1: LENGTH), OPNRD)
STRING( LENGTH-2: LENGTH)= 'BMP'
C BUILD THE HEADER INFORMATION FOR THE BMP OUTPUT FILE.
FILETYPE= 'BM'
C SIZE OF FILE IN 32-BIT WORDS.
FILESZ= ( COLUMS* ROWS)/ 4+ 256+ 14+ 1
RSVD1= 0
OFFSET= 1078
HDRSIZ= 40
IWIDTH= COLUMS
IHEIGHT= ROWS
CLRPLN= 1
BITPXL= 8
COMPRESS= 0
IMGSIZE= ROWS* COLUMS
HRES= 0
VRES= 0
CLRINDEX= 0
DO 5 I= 0, 255
GREY= I
PALETTE( 1, GREY)= GREYVLU( 1)
PALETTE( 2, GREY)= GREYVLU( 1)
PALETTE( 3, GREY)= GREYVLU( 1)
GREY= 0
PALETTE( 4, GREY)= GREYVLU( 1)
5 CONTINUE
C OPEN FILE.
WRITE( *, *) ' CREATE: "', STRING( 1: LENGTH), '".'
LUOUT= FILCRT( STRING( 1: LENGTH), CRTNRM)
BYTES= OFFSET
STATUS= WRITEF( LUOUT, FLTYPE, BYTES)
BYTES= COLUMS
C POSITION TO THE LAST ROW.
ROWIN= Z'13800'+ 1536*( ROWS- 1)
DO 10 I= 1, ROWS
POSITN= MVFLPT( LUINPT, FRMBGN, ROWIN)
STATUS= READF( LUINPT, PXLROW, BYTES)
ROWIN= ROWIN- COLUMS
STATUS= WRITEF( LUOUT, PXLROW, BYTES)
10 CONTINUE
STATUS= FILCLS( LUINPT)
STATUS= FILCLS( LUOUT)
GO TO 1010
1000 CONTINUE
STOP 'NORMAL TERMINATION'
END
INTEGER* 2 FUNCTION EXCUTE( CMNDLN)
CHARACTER CMNDLN* ( *)
C DECLARE EXTERNALS.
EXTERNAL EXEC
INTEGER* 2 LEN, EXEC
C DECLARE LOCAL STORAGE.
INTEGER* 2 LENGTH
LOGICAL* 1 CMDINT( 15)
LOGICAL* 1 COMAND( 80), ZERO, CRETRN, BYTE( 2)
INTEGER* 2 I, BGBYTE
CHARACTER* 8 FORMAT
SAVE BYTE, BGBYTE
EQUIVALENCE ( BGBYTE, BYTE( 1))
DATA ZERO/ Z'00'/, CRETRN/ Z'0D'/
C SET COMMAND INTERPRETER PATH TO 'C:\COMMAND.COM'. ZERO TERMINATE.
DATA CMDINT/ 1HC, 1H:, 1H\, 1HC, 1HO, 1HM, 1HM, 1HA, 1HN, 1HD,
1 1H., 1HC, 1HO, 1HM, .FALSE./
C SET COMAND(2): COMAND( 4) TO '/C '.
DATA COMAND( 2)/ 1H/ /, COMAND( 3)/ 1HC/, COMAND( 4)/ 1H /
C USE THE EXEC MACRO SUBROUTINE TO EXECUTE THE COMMAND INTERPRETER.
C PASS CMNDLN BUILT INTO THE COMMAND LINE STRING FOR THE COMMAND INTERPRETER.
C INSERT THE COMMAND LINE INTO COMAND.
LENGTH= LEN( CMNDLN)
C SET FIRST BYTE OF COMAND TO LENGTH.
BGBYTE= LENGTH+ 3
COMAND( 1)= BYTE( 1)
C CREATE A FORMAT STATEMENT TO READ THE COMMAND LINE.
WRITE( FORMAT, 300) LENGTH
300 FORMAT( '( ', I2, 'A1)')
C READ THE COMMAND LINE.
READ( CMNDLN, FORMAT)( COMAND( I), I= 5, LENGTH+ 4)
C TERMINATE COMAND WITH A CARRIAGE RETURN.
COMAND( LENGTH+ 5)= CRETRN
C EXECUTE THE COMMAND AND SAVE THE STATUS.
EXCUTE= EXEC( CMDINT, COMAND)
RETURN
END
INTEGER* 2 FUNCTION FILENG( STRING)
C THIS FUNCTION RETURNS THE POSITION OF THE LENGTH OF THE ROOT OF
C A FILENAME.
CHARACTER STRING*( *)
INTEGER* 2 POSITN, LENGTH, STRLEN
INTEGER* 2 LEN
CHARACTER* 1 BLANK, NULL, PERIOD
DATA BLANK/ ' '/, NULL/ Z'00'/, PERIOD/ '.'/
C GET LENGTH OF THE STRING.
LENGTH= LEN( STRING)+ 1
5 LENGTH= LENGTH- 1
IF( ( STRING( LENGTH: LENGTH) .EQ. BLANK .OR.
1 STRING( LENGTH: LENGTH) .EQ. NULL) .AND. LENGTH .GT. 0)
2 GO TO 5
C IS THIS A NULL STRING?
IF( LENGTH .EQ. 1 .AND.
1 ( STRING( 1: 1) .EQ. BLANK .OR.
2 STRING( 1: 1) .EQ. NULL)) THEN
STRLEN= 0
ELSE
STRLEN= LENGTH
END IF
LENGTH= 0
10 CONTINUE
LENGTH= LENGTH+ 1
C SKIP UP SYNTAX.
IF( STRING( LENGTH: LENGTH+ 1) .EQ. '..') LENGTH= LENGTH+ 1
IF( STRING( LENGTH: LENGTH) .NE. PERIOD .AND.
1 LENGTH .LT. STRLEN) GO TO 10
IF( STRING( LENGTH: LENGTH) .EQ. PERIOD) LENGTH= LENGTH- 1
FILENG= LENGTH
RETURN
END