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. |