TIFFReader.st
changeset 4015 7f7b255c15c2
parent 4011 0dfddf756e27
child 4103 2d8da32cf18b
equal deleted inserted replaced
4014:17853d377ead 4015:7f7b255c15c2
  3892         length := aStream nextInt64MSB:msb.
  3892         length := aStream nextInt64MSB:msb.
  3893     ].
  3893     ].
  3894     self decodeTiffTag:tagType numberType:numberType length:length.
  3894     self decodeTiffTag:tagType numberType:numberType length:length.
  3895 
  3895 
  3896     "Created: / 26-08-2017 / 11:04:50 / cg"
  3896     "Created: / 26-08-2017 / 11:04:50 / cg"
  3897     "Modified (format): / 26-08-2017 / 22:37:58 / cg"
  3897     "Modified: / 17-09-2017 / 13:06:32 / cg"
  3898 !
  3898 !
  3899 
  3899 
  3900 readTagsFrom:aStream
  3900 readTagsFrom:aStream
  3901     |numberOfTags msb|
  3901     |numberOfTags msb|
  3902 
  3902 
  3905     isBigTiff ifFalse:[
  3905     isBigTiff ifFalse:[
  3906         numberOfTags := aStream nextUnsignedInt16MSB:msb.
  3906         numberOfTags := aStream nextUnsignedInt16MSB:msb.
  3907     ] ifTrue:[
  3907     ] ifTrue:[
  3908         numberOfTags := aStream nextUnsignedInt64MSB:msb.
  3908         numberOfTags := aStream nextUnsignedInt64MSB:msb.
  3909     ].
  3909     ].
       
  3910     numberOfTags isNil ifTrue:[
       
  3911         "/ EOF
       
  3912         ^ self
       
  3913     ].
       
  3914     
  3910     1 to:numberOfTags do:[:index |
  3915     1 to:numberOfTags do:[:index |
  3911         self readSingleTagFrom:aStream.
  3916         self readSingleTagFrom:aStream.
  3912     ].
  3917     ].
  3913 
  3918 
  3914     "Created: / 26-08-2017 / 11:03:45 / cg"
  3919     "Created: / 26-08-2017 / 11:03:45 / cg"
       
  3920     "Modified: / 17-09-2017 / 11:28:03 / cg"
  3915 ! !
  3921 ! !
  3916 
  3922 
  3917 !TIFFReader methodsFor:'private-writing'!
  3923 !TIFFReader methodsFor:'private-writing'!
  3918 
  3924 
  3919 writeBitsPerSample
  3925 writeBitsPerSample
  4300     "read a stream containing a TIFF image.
  4306     "read a stream containing a TIFF image.
  4301      Leave image description in instance variables.
  4307      Leave image description in instance variables.
  4302      (i.e. to get the image, ask with image)."
  4308      (i.e. to get the image, ask with image)."
  4303 
  4309 
  4304     |char1 char2 version offset msb
  4310     |char1 char2 version offset msb
  4305      bytesPerRow img moreIfds|
  4311      bytesPerRow img moreIfds atEnd|
  4306 
  4312 
  4307     inStream := aStream.
  4313     inStream := aStream.
  4308     aStream binary.
  4314     aStream binary.
  4309 
  4315 
  4310     char1 := aStream next.
  4316     char1 := aStream next.
  4360 
  4366 
  4361     [ offset ~~ 0 ] whileTrue:[    
  4367     [ offset ~~ 0 ] whileTrue:[    
  4362         Verbose == true ifTrue:[
  4368         Verbose == true ifTrue:[
  4363             Logger info:'------------------ reading image #%1 ------------------' with:imageSequence size+1.
  4369             Logger info:'------------------ reading image #%1 ------------------' with:imageSequence size+1.
  4364         ].    
  4370         ].    
       
  4371 
       
  4372         "/ no more images, if tagData immediately follows (i.e. position == offset)
       
  4373         atEnd := (aStream position == offset).
       
  4374         atEnd := false.
  4365         
  4375         
  4366         aStream position:offset.
  4376         aStream position:offset.
  4367 
  4377 
  4368         "setup default values"
  4378         "setup default values"
  4369         metaData := TIFFMetaData new.
  4379         metaData := TIFFMetaData new.
  4384         sampleFormat := SAMPLEFORMAT_UINT.
  4394         sampleFormat := SAMPLEFORMAT_UINT.
  4385         minSampleValue := maxSampleValue := nil.
  4395         minSampleValue := maxSampleValue := nil.
  4386         tileWidth := tileLength := tileOffsets := tileByteCounts := nil.
  4396         tileWidth := tileLength := tileOffsets := tileByteCounts := nil.
  4387         
  4397         
  4388         self readTagsFrom:aStream.
  4398         self readTagsFrom:aStream.
       
  4399         
  4389         "/ read the next offset now,
  4400         "/ read the next offset now,
  4390         "/ because the stream's position will be changed when the image-data is read
  4401         "/ because the stream's position will be changed when the image-data is read
  4391         isBigTiff ifFalse:[
  4402 
  4392             offset := aStream nextUnsignedInt32MSB:msb.
  4403         (stripOffsets at:1) == aStream position ifTrue:[
  4393         ] ifTrue:[
  4404             offset := 0
  4394             offset := aStream nextUnsignedInt64MSB:msb.
  4405         ] ifFalse:[
  4395         ].    
  4406             isBigTiff ifFalse:[
  4396 
  4407                 offset := aStream nextUnsignedInt32MSB:msb.
       
  4408             ] ifTrue:[
       
  4409                 offset := aStream nextUnsignedInt64MSB:msb.
       
  4410             ].    
       
  4411         ].
       
  4412         
  4397         "check for required tags"
  4413         "check for required tags"
  4398         width isNil ifTrue:[ ^ self fileFormatError:'missing width tag' ].
  4414         width isNil ifTrue:[ ^ self fileFormatError:'missing width tag' ].
  4399         height isNil ifTrue:[ ^ self fileFormatError:'missing length tag' ].
  4415         height isNil ifTrue:[ ^ self fileFormatError:'missing length tag' ].
  4400         bitsPerSample isNil ifTrue:[
  4416         bitsPerSample isNil ifTrue:[
  4401             bitsPerSample := Array new:samplesPerPixel withAll:1.
  4417             bitsPerSample := Array new:samplesPerPixel withAll:1.
  4497             Logger info:'read %1 images' with:imageSequence size
  4513             Logger info:'read %1 images' with:imageSequence size
  4498         ].    
  4514         ].    
  4499     ].    
  4515     ].    
  4500     ^ self
  4516     ^ self
  4501 
  4517 
  4502     "Modified: / 27-08-2017 / 23:24:37 / cg"
  4518     "Modified: / 17-09-2017 / 13:06:10 / cg"
  4503 ! !
  4519 ! !
  4504 
  4520 
  4505 !TIFFReader methodsFor:'writing'!
  4521 !TIFFReader methodsFor:'writing'!
  4506 
  4522 
  4507 save:image onStream:aStream
  4523 save:image onStream:aStream