@@ -839,8 +839,6 @@ impl ImageFileDirectory {
839
839
840
840
/// Read a single tag from the cursor
841
841
async fn read_tag ( cursor : & mut AsyncCursor , bigtiff : bool ) -> AsyncTiffResult < ( Tag , Value ) > {
842
- // let start_cursor_position = cursor.position();
843
-
844
842
let tag_name = Tag :: from_u16_exhaustive ( cursor. read_u16 ( ) . await ?) ;
845
843
846
844
let tag_type_code = cursor. read_u16 ( ) . await ?;
@@ -855,10 +853,6 @@ async fn read_tag(cursor: &mut AsyncCursor, bigtiff: bool) -> AsyncTiffResult<(T
855
853
856
854
let tag_value = read_tag_value ( cursor, tag_type, count, bigtiff) . await ?;
857
855
858
- // TODO: better handle management of cursor state <- should be done now
859
- // let ifd_entry_size = if bigtiff { 20 } else { 12 };
860
- // cursor.seek(start_cursor_position + ifd_entry_size);
861
-
862
856
Ok ( ( tag_name, tag_value) )
863
857
}
864
858
@@ -878,7 +872,17 @@ async fn read_tag_value(
878
872
return Ok ( Value :: List ( vec ! [ ] ) ) ;
879
873
}
880
874
881
- let tag_size = tag_type. size ( ) ;
875
+ let tag_size = match tag_type {
876
+ Type :: BYTE | Type :: SBYTE | Type :: ASCII | Type :: UNDEFINED => 1 ,
877
+ Type :: SHORT | Type :: SSHORT => 2 ,
878
+ Type :: LONG | Type :: SLONG | Type :: FLOAT | Type :: IFD => 4 ,
879
+ Type :: LONG8
880
+ | Type :: SLONG8
881
+ | Type :: DOUBLE
882
+ | Type :: RATIONAL
883
+ | Type :: SRATIONAL
884
+ | Type :: IFD8 => 8 ,
885
+ } ;
882
886
883
887
let value_byte_length = count. checked_mul ( tag_size) . unwrap ( ) ;
884
888
@@ -901,12 +905,10 @@ async fn read_tag_value(
901
905
} ;
902
906
let reader = cursor
903
907
. reader ( )
904
- . get_bytes ( offset..offset + value_byte_length)
908
+ . get_metadata_bytes ( offset..offset + value_byte_length)
905
909
. await ?
906
910
. reader ( ) ;
907
911
EndianAwareReader :: new ( reader, cursor. endianness ( ) )
908
- // cursor.seek(offset);
909
- // cursor.read(value_byte_length).await?
910
912
} ;
911
913
// Case 2: there is one value.
912
914
if count == 1 {
0 commit comments