RAW vs JPG

boojum

Ignoble Miscreant
Local time
10:59 AM
Joined
Jan 23, 2021
Messages
4,414
Location
NW Oregon, USA
OK, I know that RAW can be up to a 16 bit image which means an awfully large color palette or great gradations in mono and that the 16 bit detail will be nice, too. And JPG is limited by design to 8 bit which obviously means smaller color palette and less gradation in mono. OK. And RAW edits are done just like JPG edits. So it seems best to shoot RAW for the better quality image. Great. But to print this better quality image it must be converted to 8 bit JPG. The same to display it on the internet. So other than viewing it on our monitors or sending it to others to view on their monitors what is the RAW advantage if it is going to be a JPG anyway??
 
The extra bits let to pull detail out of the shadows and highlights, change tone curves without the image coming out like a contour map.

Or write your own Fortran code to perform image segmentation and object recognition.
 
I process the RAW (DNG in my case) file, then save it to a TIF format (which may be further edited or processed) for the highest detail possible. The only reason I convert files to JPG is the size limitation of posting or sharing files. JPGs are digital prints, while RAW formats are digital negatives.

As to printing, I ALWAYS print from TIF Files - never JPGs.
 
The advantage is, first, editability .. you have many more degrees of freedom in editing with a raw original than with a JPEG original.

Second, it is not true that you *must* output a raw file as a JPEG to be able to print it (or archive it, or incorporate it into other works like books, etc). That depends entirely on the tools you are using. If you use Lightroom or most other professional grade image processing tools, you can print directly from within the tool environment and the tool can handle whatever is the least lossy conversion to whatever the print engine needs without ever needing a JPEG intermediate stage. You can also output to 16bit lossless compressed TIFF for more future editability even including your edits, or the newer HEIF format for shareable compressed images at 10-16 bit depth.

Raw capture simply nets many more options throughout the whole capture to rendered product chain.

G
 
Oh, Lordy! We can't have this thread going on at the same time as the "film vs digital" thread!
Let's just please post cute pictures of kittens, without any technical data. We all need a break.
I thought I felt a disturbance in the Force…

I don't have a kitten. Here's a cute picture of my dog (shot, edited, and uploaded as JPEG):

D7K_6531.JPEG

(Hope this doesn't turn into a cats vs. dogs debate.)
 
Last edited:
Perhaps I was not precise enough about printing. I mean printing like sending it to a processor to get it printed. Printing at home works if you want a small print. My vanity is so unrestrained that I sometimes want a large print, like 24" x 36". The processors I know of will accept JPG or PNG only. I know no shop handling raw in any raw format.

I am not arguing which is the better format, raw is. But the practical end is what the hell can be done with it? It seems all must be converted to 8 bit JPG. Maybe some shops will soon take 10 bit HEIF. But this is now.

So, other than Brian's post that raw edits allow more to be done in edit I suppose that is it. And that is a big deal, yes, because his other option of FORTRAN programming in the nether reaches of image manipulation is beyond my ability.

If we all agree that the reason that raw images are better is that they can be edited more finely, good. Then we can all get back to RetroGrouch's suggestion of kitten pics, JPG or RAW. ;o) So chime in, is it that raw images can be better edited the reason of their superiority?? Chime in because I have two of the cutest kittens here I want to show you. 😎
 
Perhaps I was not precise enough about printing. I mean printing like sending it to a processor to get it printed. Printing at home works if you want a small print. My vanity is so unrestrained that I sometimes want a large print, like 24" x 36". The processors I know of will accept JPG or PNG only. I know no shop handling raw in any raw format.

I am not arguing which is the better format, raw is. But the practical end is what the hell can be done with it? It seems all must be converted to 8 bit JPG. Maybe some shops will soon take 10 bit HEIF. But this is now.

So, other than Brian's post that raw edits allow more to be done in edit I suppose that is it. And that is a big deal, yes, because his other option of FORTRAN programming in the nether reaches of image manipulation is beyond my ability.

If we all agree that the reason that raw images are better is that they can be edited more finely, good. Then we can all get back to RetroGrouch's suggestion of kitten pics, JPG or RAW. ;o) So chime in, is it that raw images can be better edited the reason of their superiority?? Chime in because I have two of the cutest kittens here I want to show you. 😎

Given that HEIF has been the default format for iPhone photos for what, 3–5 years now, I would be surprised if most print shops cannot take that format.
 
So other than viewing it on our monitors or sending it to others to view on their monitors what is the RAW advantage if it is going to be a JPG anyway??

Being able to fix white balance without mucking up colors as it can when WBing a JPEG file.
Being able to take the wider tonal range file and compress it down to 8 bit with a tone curve of our choosing.
If shooting at high ISO being able to use much more sophisticated NR programs. Ditto for sharpening and sometimes demosaicing too.
Blending multiple images works better when done raw, esp. with exposure fusing.
 
12-bit JPEG has been around for a long time. Proprietary.

Best thing about DNG on my M9, M8, and M Monochrom: I do not have to deal with Huffman code and Discrete Cosine Transforms just to read an image into memory.

SUBROUTINE FILELD( FILE)
IMPLICIT NONE
C THIS IS THE KEY ROUTINE THAT READS IN DNG FILES, CALLS THE CONVERSION
C ROUTINES, AND OUTPUTS THE NEW DNG FILES.
CHARACTER* ( *) FILE
INCLUDE 'GRAPH.FI'
INCLUDE 'GRAPHAPI.FI'
INCLUDE 'FSUBLIB.FI'
C+++ BEGIN/ CMMDNG/
INTEGER* 4 MMCOLUMNS, MMROWS, MMSIZE
PARAMETER ( MMCOLUMNS= 5216, MMROWS= 3472)
PARAMETER ( MMSIZE= MMCOLUMNS* MMROWS* 2)
INTEGER* 4 MMSTART, DNGSIZE
COMMON/ CMMDNG/ MMSTART, DNGSIZE
C--- END/ CMMDNG/
C+++ BEGIN / CMLUNM/
INTEGER* 4 LUINPUT, LULIST, LUTEMP, LURESFILE, LUOUTPUT
COMMON/ CMLUNM/ LUINPUT, LULIST, LUTEMP, LURESFILE, LUOUTPUT
C--- END / CMLUNM/
C+++ BEGIN / CMBUFR/
C BUFFER COMMON BLOCK.
INTEGER* 4 MXBFSZ, MXRCSZ, MAXHEX, RECRDS, IFD0ENTRIES
PARAMETER ( MXRCSZ= 4096, RECRDS= 24576)
PARAMETER ( MXBFSZ= MXRCSZ* RECRDS- 1, MAXHEX= 16384)
PARAMETER ( IFD0ENTRIES= 49)
INTEGER* 4 NXTBYT, NXTRCD, BFRLEN
INTEGER* 4 HEXBGN, HEXLEN
INTEGER* 1 BUFFER, DNGIMAGE
COMMON/ CMBUFR/ BUFFER( 0: MXBFSZ), DNGIMAGE( 0: MXBFSZ),
1 NXTBYT, BFRLEN, NXTRCD,
1 HEXBGN( MAXHEX), HEXLEN( MAXHEX)
CHARACTER* 1 BUFSTR( 0: MXBFSZ)
EQUIVALENCE ( BUFSTR, BUFFER)
CHARACTER* 12 IFD0TAGS( IFD0ENTRIES)
INTEGER* 4 TAGSI4( 3, IFD0ENTRIES)
INTEGER* 2 TAGSI2( 6, IFD0ENTRIES)
INTEGER* 2 TAGSI1( 12, IFD0ENTRIES)
EQUIVALENCE ( BUFFER( 10), IFD0TAGS, TAGSI4, TAGSI2, TAGSI1)
INTEGER* 2 IDENTIFIER, TIFFVERSION
INTEGER* 4 IFD0OFFSET
EQUIVALENCE ( IDENTIFIER, BUFFER( 0))
EQUIVALENCE ( TIFFVERSION, BUFFER( 2))
EQUIVALENCE ( IFD0OFFSET, BUFFER( 4))
C--- END / CMBUFR/
C+++ BEGIN / CMDNGTAGS/
INTEGER* 4 DNGTAGS
PARAMETER ( DNGTAGS= 52)
INTEGER* 2 IFD0KEEP, TAGCODES
CHARACTER* 64 TAGNAMES
INTEGER* 4 TCOLUMNS, TROWS, TBITS, TIMAGESTART, TSUBIFD, TWHITE
INTEGER* 4 TXRES, TYRES, TCFAREPEAT, TCFAPATTERN, TVERS, TBLACK
COMMON/ CMDNGTAGS/ TAGNAMES( DNGTAGS), IFD0KEEP( DNGTAGS),
1 TAGCODES( DNGTAGS), TCOLUMNS, TROWS, TBITS, TIMAGESTART,
1 TSUBIFD, TXRES, TYRES, TCFAREPEAT, TCFAPATTERN, TVERS, TBLACK,
1 TWHITE
C--- END / CMDNGTAGS
INTEGER* 2 DATAVALUE( 0: MXBFSZ/ 2)
EQUIVALENCE ( DATAVALUE, BUFFER)
INTEGER* 1 BUFR2D( MXRCSZ, RECRDS)
EQUIVALENCE ( BUFR2D( 1, 1), BUFFER( 0))
INTEGER* 4 BEGINM8LUT, ENDM8LUT
PARAMETER ( BEGINM8LUT= '00664'X, ENDM8LUT= '00862'X)
INTEGER* 4 BEGINM9LUT, ENDM9LUT
PARAMETER ( BEGINM9LUT= '00614'X, ENDM9LUT= '00812'X)
INTEGER* 4 NEWPTR, OFFSET, POSITN
INTEGER* 2 BYTES, PLNFIL, ASCII1, ASCII2, HANDLE, COUNT
INTEGER* 2 HANDLE2, STATUS
INTEGER* 4 LENGTH, RECORD, I, J, RECORDS, ERRINDEX, INDEX
INTEGER* 2 LENGTH2
INTEGER* 1 ASCIB1( 2), ASCIB2( 2)
EQUIVALENCE ( ASCII1, ASCIB1( 1))
EQUIVALENCE ( ASCII2, ASCIB2( 1))
INTEGER* 4 EXTNSN, NAME, FILSIZ
INTEGER* 4 OLDTAGS, NEWTAGS, TAGINDEX, TAGLIST, TAGSEARCH
INTEGER* 4 SUBTAGS, SUBIFDOFFSET, CURVE
INTEGER* 2 ROOTLN
LOGICAL* 4 PROCESS_ALL
CHARACTER* 80 FILENAME
C EXTERNALS.
INTEGER* 4 STRLEN
INTEGER* 4 SQZSTR
INTEGER* 4 IFDCONVERT, IFDVERS
WRITE( *, 100) 'INPUT CURVE NUMBER (1 TO 8): '
READ( *, 210) CURVE
210 FORMAT( I2)
IF( CURVE .LT. 0 .OR. CURVE .GT. 8) THEN
CURVE= 3
END IF
1000 CONTINUE
WRITE( *, 100) ' FILE TO PROCESS: '
100 FORMAT( A, $)
READ( *, 200) FILE
WRITE( *, *) ' FILE IS "', FILE, '".'
200 FORMAT( A)
LENGTH= STRLEN( FILE)
PROCESS_ALL= LENGTH .EQ. 0
IF( PROCESS_ALL) THEN
WRITE( *, *) ' PROCESS FILES IN DNGFILES.DAT'
OPEN( UNIT= LULIST, FILE= 'DNGFILES.DAT', STATUS= 'OLD')
WRITE( *, *) ' PROCESS FILES IN DNGFILES.DAT'
ELSE
FILENAME= FILE( 1: LENGTH)
END IF
1010 CONTINUE
IF( PROCESS_ALL) THEN
READ( LULIST, 200, END= 1020) FILENAME
LENGTH= STRLEN( FILENAME)
WRITE( *, *) ' FILE= "', FILENAME( 1: LENGTH), '"'
IF( LENGTH .EQ. 0) GO TO 1020
FILE= FILENAME( 1: LENGTH)
END IF
C INIT BUFFER BEGINNING.
NXTBYT= 0
C OPEN FILE.

OPEN( UNIT= LUINPUT, FILE= FILENAME( 1: LENGTH), STATUS= 'OLD',
1 RECORDTYPE= 'FIXED', FORM= 'UNFORMATTED',
2 RECL= MXRCSZ, ERR= 1000)
C IF OPEN FAILED, GO TO NEXT FILE.
WRITE( *, *) ' PROCESSING FILE "', FILENAME( 1: LENGTH), '".'
IF( CURVE .NE. 0) THEN
FILENAME( 1: 1)= 'G'
ELSE
FILENAME( 1: 1)= 'C'
END IF
FILSIZ= 0
C OPEN SUCCESS.
FILSIZ= FILESIZE( LUINPUT)
LENGTH= MXRCSZ
RECORDS= FILSIZ/ MXRCSZ
DO 10 RECORD= 1, RECORDS
READ( LUINPUT)( BUFR2D( I, RECORD), I= 1, LENGTH)
10 CONTINUE
RECORD= 17790
LENGTH= FILSIZ- ( RECORDS* MXRCSZ)
IF( LENGTH .GT. 0) THEN
READ( LUINPUT)( BUFR2D( I, RECORD), I= 1, LENGTH)
END IF
C LENGTH OF BUFFER.
WRITE( *, 310) FILSIZ
310 FORMAT( ' FILESIZE= ', I8)
C MAKE A COPY OF THE DNG IMAGE FROM THE BUFFER.
DO 5 I= 1, FILSIZ
DNGIMAGE( I)= BUFFER( I)
5 CONTINUE
C OPEN THE IFD.
TSUBIFD= -1
OLDTAGS= BUFFER( 8)
OFFSET= 10
NEWTAGS= IFDVERS( BUFFER( OFFSET), BUFFER( OFFSET), OLDTAGS)
C IS THERE A SUBIFD?
IF( TSUBIFD .NE. -1) THEN
CALL IFD_VALUES( BUFFER( OFFSET), BUFFER( OFFSET),
1 OLDTAGS)
C WE NEED THE INFO FROM THE SUBIFD.
OFFSET= TSUBIFD+ 2
SUBTAGS= BUFFER( TSUBIFD)
NEWTAGS= IFDVERS( BUFFER( OFFSET), BUFFER( OFFSET), SUBTAGS)
OLDTAGS= SUBTAGS
END IF
IF( .FALSE.) THEN
CALL FIND_BADLINE( BUFFER( TIMAGESTART),
1 DNGIMAGE( TIMAGESTART),
1 TCOLUMNS, TROWS)
END IF
CALL CONVERT16( BUFFER( TIMAGESTART), TCOLUMNS, TROWS, CURVE)
IF( CURVE .NE. 0) THEN
CALL IFDUPDATE( BUFFER( OFFSET), BUFFER( OFFSET), OLDTAGS)
C BUFFER( OFFSET- 2)= NEWTAGS
END IF
LENGTH= STRLEN( FILENAME)
OPEN( UNIT= LUOUTPUT, FILE= FILENAME( 1: LENGTH),
1 RECORDTYPE= 'FIXED', FORM= 'UNFORMATTED',
2 RECL= MXRCSZ)
LENGTH= MXRCSZ
RECORDS= FILSIZ/ MXRCSZ
LENGTH= MXRCSZ
DO 16 RECORD= 1, RECORDS
WRITE( LUOUTPUT)( BUFR2D( I, RECORD), I= 1, LENGTH)
16 CONTINUE
LENGTH= FILSIZ- ( RECORDS* MXRCSZ)
IF( LENGTH .GT. 0) THEN
WRITE( LUOUTPUT)( BUFR2D( I, RECORD), I= 1, LENGTH)
END IF
CLOSE( UNIT= LUINPUT)
CLOSE( UNIT= LUOUTPUT)
IF( PROCESS_ALL) GO TO 1010
1020 CONTINUE
FILE= FILENAME( 1: 12)
RETURN
END
 
Oh, Lordy! We can't have this thread going on at the same time as the "film vs digital" thread!
Let's just please post cute pictures of kittens, without any technical data. We all need a break.
Threads like these are known as "reinventing the wheel".

(A few less kindly among us would call it "reinventing the toothpick.")

One of about seven topics that get rehashed all the time.To keep us awake and drinking coffee, I guess.

Now and then a new idea pops up in one of these recurgitations.

Many live in hope.

My cats are all for kitten photos. In our house there are currently five felines, so a majority vote. Me, I go with that pooch in #16...

But then we have several excellent photo threads going on at this time here in RFF.

So yes, there is hope.
 
12-bit JPEG has been around for a long time. Proprietary.

Best thing about DNG on my M9, M8, and M Monochrom: I do not have to deal with Huffman code and Discrete Cosine Transforms just to read an image into memory.

SUBROUTINE FILELD( FILE)
IMPLICIT NONE
C THIS IS THE KEY ROUTINE THAT READS IN DNG FILES, CALLS THE CONVERSION
C ROUTINES, AND OUTPUTS THE NEW DNG FILES.
CHARACTER* ( *) FILE
INCLUDE 'GRAPH.FI'
INCLUDE 'GRAPHAPI.FI'
INCLUDE 'FSUBLIB.FI'
C+++ BEGIN/ CMMDNG/
INTEGER* 4 MMCOLUMNS, MMROWS, MMSIZE
PARAMETER ( MMCOLUMNS= 5216, MMROWS= 3472)
PARAMETER ( MMSIZE= MMCOLUMNS* MMROWS* 2)
INTEGER* 4 MMSTART, DNGSIZE
COMMON/ CMMDNG/ MMSTART, DNGSIZE
C--- END/ CMMDNG/
C+++ BEGIN / CMLUNM/
INTEGER* 4 LUINPUT, LULIST, LUTEMP, LURESFILE, LUOUTPUT
COMMON/ CMLUNM/ LUINPUT, LULIST, LUTEMP, LURESFILE, LUOUTPUT
C--- END / CMLUNM/
C+++ BEGIN / CMBUFR/
C BUFFER COMMON BLOCK.
INTEGER* 4 MXBFSZ, MXRCSZ, MAXHEX, RECRDS, IFD0ENTRIES
PARAMETER ( MXRCSZ= 4096, RECRDS= 24576)
PARAMETER ( MXBFSZ= MXRCSZ* RECRDS- 1, MAXHEX= 16384)
PARAMETER ( IFD0ENTRIES= 49)
INTEGER* 4 NXTBYT, NXTRCD, BFRLEN
INTEGER* 4 HEXBGN, HEXLEN
INTEGER* 1 BUFFER, DNGIMAGE
COMMON/ CMBUFR/ BUFFER( 0: MXBFSZ), DNGIMAGE( 0: MXBFSZ),
1 NXTBYT, BFRLEN, NXTRCD,
1 HEXBGN( MAXHEX), HEXLEN( MAXHEX)
CHARACTER* 1 BUFSTR( 0: MXBFSZ)
EQUIVALENCE ( BUFSTR, BUFFER)
CHARACTER* 12 IFD0TAGS( IFD0ENTRIES)
INTEGER* 4 TAGSI4( 3, IFD0ENTRIES)
INTEGER* 2 TAGSI2( 6, IFD0ENTRIES)
INTEGER* 2 TAGSI1( 12, IFD0ENTRIES)
EQUIVALENCE ( BUFFER( 10), IFD0TAGS, TAGSI4, TAGSI2, TAGSI1)
INTEGER* 2 IDENTIFIER, TIFFVERSION
INTEGER* 4 IFD0OFFSET
EQUIVALENCE ( IDENTIFIER, BUFFER( 0))
EQUIVALENCE ( TIFFVERSION, BUFFER( 2))
EQUIVALENCE ( IFD0OFFSET, BUFFER( 4))
C--- END / CMBUFR/
C+++ BEGIN / CMDNGTAGS/
INTEGER* 4 DNGTAGS
PARAMETER ( DNGTAGS= 52)
INTEGER* 2 IFD0KEEP, TAGCODES
CHARACTER* 64 TAGNAMES
INTEGER* 4 TCOLUMNS, TROWS, TBITS, TIMAGESTART, TSUBIFD, TWHITE
INTEGER* 4 TXRES, TYRES, TCFAREPEAT, TCFAPATTERN, TVERS, TBLACK
COMMON/ CMDNGTAGS/ TAGNAMES( DNGTAGS), IFD0KEEP( DNGTAGS),
1 TAGCODES( DNGTAGS), TCOLUMNS, TROWS, TBITS, TIMAGESTART,
1 TSUBIFD, TXRES, TYRES, TCFAREPEAT, TCFAPATTERN, TVERS, TBLACK,
1 TWHITE
C--- END / CMDNGTAGS
INTEGER* 2 DATAVALUE( 0: MXBFSZ/ 2)
EQUIVALENCE ( DATAVALUE, BUFFER)
INTEGER* 1 BUFR2D( MXRCSZ, RECRDS)
EQUIVALENCE ( BUFR2D( 1, 1), BUFFER( 0))
INTEGER* 4 BEGINM8LUT, ENDM8LUT
PARAMETER ( BEGINM8LUT= '00664'X, ENDM8LUT= '00862'X)
INTEGER* 4 BEGINM9LUT, ENDM9LUT
PARAMETER ( BEGINM9LUT= '00614'X, ENDM9LUT= '00812'X)
INTEGER* 4 NEWPTR, OFFSET, POSITN
INTEGER* 2 BYTES, PLNFIL, ASCII1, ASCII2, HANDLE, COUNT
INTEGER* 2 HANDLE2, STATUS
INTEGER* 4 LENGTH, RECORD, I, J, RECORDS, ERRINDEX, INDEX
INTEGER* 2 LENGTH2
INTEGER* 1 ASCIB1( 2), ASCIB2( 2)
EQUIVALENCE ( ASCII1, ASCIB1( 1))
EQUIVALENCE ( ASCII2, ASCIB2( 1))
INTEGER* 4 EXTNSN, NAME, FILSIZ
INTEGER* 4 OLDTAGS, NEWTAGS, TAGINDEX, TAGLIST, TAGSEARCH
INTEGER* 4 SUBTAGS, SUBIFDOFFSET, CURVE
INTEGER* 2 ROOTLN
LOGICAL* 4 PROCESS_ALL
CHARACTER* 80 FILENAME
C EXTERNALS.
INTEGER* 4 STRLEN
INTEGER* 4 SQZSTR
INTEGER* 4 IFDCONVERT, IFDVERS
WRITE( *, 100) 'INPUT CURVE NUMBER (1 TO 8): '
READ( *, 210) CURVE
210 FORMAT( I2)
IF( CURVE .LT. 0 .OR. CURVE .GT. 8) THEN
CURVE= 3
END IF
1000 CONTINUE
WRITE( *, 100) ' FILE TO PROCESS: '
100 FORMAT( A, $)
READ( *, 200) FILE
WRITE( *, *) ' FILE IS "', FILE, '".'
200 FORMAT( A)
LENGTH= STRLEN( FILE)
PROCESS_ALL= LENGTH .EQ. 0
IF( PROCESS_ALL) THEN
WRITE( *, *) ' PROCESS FILES IN DNGFILES.DAT'
OPEN( UNIT= LULIST, FILE= 'DNGFILES.DAT', STATUS= 'OLD')
WRITE( *, *) ' PROCESS FILES IN DNGFILES.DAT'
ELSE
FILENAME= FILE( 1: LENGTH)
END IF
1010 CONTINUE
IF( PROCESS_ALL) THEN
READ( LULIST, 200, END= 1020) FILENAME
LENGTH= STRLEN( FILENAME)
WRITE( *, *) ' FILE= "', FILENAME( 1: LENGTH), '"'
IF( LENGTH .EQ. 0) GO TO 1020
FILE= FILENAME( 1: LENGTH)
END IF
C INIT BUFFER BEGINNING.
NXTBYT= 0
C OPEN FILE.

OPEN( UNIT= LUINPUT, FILE= FILENAME( 1: LENGTH), STATUS= 'OLD',
1 RECORDTYPE= 'FIXED', FORM= 'UNFORMATTED',
2 RECL= MXRCSZ, ERR= 1000)
C IF OPEN FAILED, GO TO NEXT FILE.
WRITE( *, *) ' PROCESSING FILE "', FILENAME( 1: LENGTH), '".'
IF( CURVE .NE. 0) THEN
FILENAME( 1: 1)= 'G'
ELSE
FILENAME( 1: 1)= 'C'
END IF
FILSIZ= 0
C OPEN SUCCESS.
FILSIZ= FILESIZE( LUINPUT)
LENGTH= MXRCSZ
RECORDS= FILSIZ/ MXRCSZ
DO 10 RECORD= 1, RECORDS
READ( LUINPUT)( BUFR2D( I, RECORD), I= 1, LENGTH)
10 CONTINUE
RECORD= 17790
LENGTH= FILSIZ- ( RECORDS* MXRCSZ)
IF( LENGTH .GT. 0) THEN
READ( LUINPUT)( BUFR2D( I, RECORD), I= 1, LENGTH)
END IF
C LENGTH OF BUFFER.
WRITE( *, 310) FILSIZ
310 FORMAT( ' FILESIZE= ', I8)
C MAKE A COPY OF THE DNG IMAGE FROM THE BUFFER.
DO 5 I= 1, FILSIZ
DNGIMAGE( I)= BUFFER( I)
5 CONTINUE
C OPEN THE IFD.
TSUBIFD= -1
OLDTAGS= BUFFER( 8)
OFFSET= 10
NEWTAGS= IFDVERS( BUFFER( OFFSET), BUFFER( OFFSET), OLDTAGS)
C IS THERE A SUBIFD?
IF( TSUBIFD .NE. -1) THEN
CALL IFD_VALUES( BUFFER( OFFSET), BUFFER( OFFSET),
1 OLDTAGS)
C WE NEED THE INFO FROM THE SUBIFD.
OFFSET= TSUBIFD+ 2
SUBTAGS= BUFFER( TSUBIFD)
NEWTAGS= IFDVERS( BUFFER( OFFSET), BUFFER( OFFSET), SUBTAGS)
OLDTAGS= SUBTAGS
END IF
IF( .FALSE.) THEN
CALL FIND_BADLINE( BUFFER( TIMAGESTART),
1 DNGIMAGE( TIMAGESTART),
1 TCOLUMNS, TROWS)
END IF
CALL CONVERT16( BUFFER( TIMAGESTART), TCOLUMNS, TROWS, CURVE)
IF( CURVE .NE. 0) THEN
CALL IFDUPDATE( BUFFER( OFFSET), BUFFER( OFFSET), OLDTAGS)
C BUFFER( OFFSET- 2)= NEWTAGS
END IF
LENGTH= STRLEN( FILENAME)
OPEN( UNIT= LUOUTPUT, FILE= FILENAME( 1: LENGTH),
1 RECORDTYPE= 'FIXED', FORM= 'UNFORMATTED',
2 RECL= MXRCSZ)
LENGTH= MXRCSZ
RECORDS= FILSIZ/ MXRCSZ
LENGTH= MXRCSZ
DO 16 RECORD= 1, RECORDS
WRITE( LUOUTPUT)( BUFR2D( I, RECORD), I= 1, LENGTH)
16 CONTINUE
LENGTH= FILSIZ- ( RECORDS* MXRCSZ)
IF( LENGTH .GT. 0) THEN
WRITE( LUOUTPUT)( BUFR2D( I, RECORD), I= 1, LENGTH)
END IF
CLOSE( UNIT= LUINPUT)
CLOSE( UNIT= LUOUTPUT)
IF( PROCESS_ALL) GO TO 1010
1020 CONTINUE
FILE= FILENAME( 1: 12)
RETURN
END

This post speaks for itself.

And here I was thinking photography was meant to be fun...
 
Last edited:
Back
Top Bottom