// Auxilliary method for stream-reading of values number ReadValueOfType(object fStream, string type, number byteOrder) { number val = 0 TagGroup tg = NewTagGroup() if ( type == "bool" ) { tg.TagGroupSetTagAsBoolean( type, 0 ) tg.TagGroupReadTagDataFromStream( type, fstream, byteOrder ) tg.TagGroupGetTagAsBoolean( type, val ) } else if ( type == "uint16" ) { tg.TagGroupSetTagAsUInt16( type, 0 ) tg.TagGroupReadTagDataFromStream( type, fstream, byteOrder ) tg.TagGroupGetTagAsUInt16( type, val ) } else if ( type == "uint32" ) { tg.TagGroupSetTagAsUInt32( type, 0 ) tg.TagGroupReadTagDataFromStream( type, fstream, byteOrder ) tg.TagGroupGetTagAsUInt32( type, val ) } else Throw("Invalid read-type:"+type) return val } string ExtractTextFromTiff( string path ) { string txt if ( !DoesFileExist(path) ) Throw("File not found.\n"+path) // Open Stream number fileID = OpenFileForReading( path ) object fStream = NewStreamFromFileReference(fileID,1) // Read data byte order. (1 = big Endian, 2= little Endian for Gatan) number val number byteOrder = 0 val = fStream.ReadValueOfType( "uint16", byteOrder ) byteOrder = ( 0x4949 == val ) ? 2 : ( 0x4D4D == val ? 1 : 0 ) //Result("\n TIFF endian:"+byteOrder) // Verify TIFF image val = fStream.ReadValueOfType( "uint16", byteOrder ) if ( val != 42 ) Throw( "Not a valid TIFF image" ) // Browse all directories number offset = fStream.ReadValueOfType( "uint32", byteOrder ) while( 0 != offset ) { fStream.StreamSetPos( 0, offset ) // Start of IFD number nEntries = fStream.ReadValueOfType( "uint16", byteOrder ) for ( number e=0;e