Changeset 6033


Ignore:
Timestamp:
03/17/10 07:21:41 (10 years ago)
Author:
curtis
Message:

Parse spacing from ImageJ-style TIFF metadata.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/components/bio-formats/src/loci/formats/in/TiffReader.java

    r6026 r6033  
    173173  protected void initMetadataStore() throws FormatException { 
    174174    super.initMetadataStore(); 
     175    MetadataStore store = 
     176      new FilterMetadata(getMetadataStore(), isMetadataFiltered()); 
    175177    if (description != null) { 
    176       MetadataStore store = 
    177         new FilterMetadata(getMetadataStore(), isMetadataFiltered()); 
    178178      store.setImageDescription(description, 0); 
    179179    } 
     180    populateMetadataStoreImageJ(store); 
    180181  } 
    181182 
     
    207208    while (st.hasMoreTokens()) { 
    208209      String token = st.nextToken(); 
    209       int value = 0; 
     210      String value = null; 
    210211      int eq = token.indexOf("="); 
    211       if (eq != -1 && eq + 1 < token.length()) { 
    212         try { 
    213           value = Integer.parseInt(token.substring(eq + 1)); 
    214         } 
    215         catch (NumberFormatException e) { 
    216           LOGGER.debug("Failed to parse integer value", e); 
    217         } 
    218       } 
    219  
    220       if (token.startsWith("channels=")) c = value; 
    221       else if (token.startsWith("slices=")) z = value; 
    222       else if (token.startsWith("frames=")) t = value; 
     212      if (eq >= 0) value = token.substring(eq + 1); 
     213 
     214      if (token.startsWith("channels=")) c = parseInt(value); 
     215      else if (token.startsWith("slices=")) z = parseInt(value); 
     216      else if (token.startsWith("frames=")) t = parseInt(value); 
     217      else if (token.startsWith("spacing=")) put("Spacing", value); 
     218      else if (token.startsWith("unit=")) put("Unit", value); 
    223219    } 
    224220    if (z * c * t == c && isRGB()) { 
     
    289285  } 
    290286 
     287  /** 
     288   * Checks the original metadata table for ImageJ-specific information 
     289   * to propagate into the metadata store. 
     290   */ 
     291  private void populateMetadataStoreImageJ(MetadataStore store) { 
     292    // TODO: Perhaps we should only populate the physical Z size if the unit is 
     293    //       a known, physical quantity such as "micron" rather than "pixel". 
     294    //String unit = getGlobalMeta("Unit"); 
     295    Object spacing = getGlobalMeta("Spacing"); 
     296    double zDepth = 0; 
     297    if (spacing != null) { 
     298      zDepth = parseDouble(spacing.toString()); 
     299      if (zDepth < 0) zDepth = -zDepth; 
     300    } 
     301    if (zDepth != 0) store.setDimensionsPhysicalSizeZ(new Double(zDepth), 0, 0); 
     302  } 
     303 
    291304  private void parseCommentMetamorph(String comment) { 
    292305    // parse key/value pairs 
     
    327340  } 
    328341 
     342  private int parseInt(String s) { 
     343    try { 
     344      return Integer.parseInt(s); 
     345    } 
     346    catch (NumberFormatException e) { 
     347      LOGGER.debug("Failed to parse integer value", e); 
     348    } 
     349    return 0; 
     350  } 
     351 
     352  private double parseDouble(String s) { 
     353    try { 
     354      return Double.parseDouble(s); 
     355    } 
     356    catch (NumberFormatException e) { 
     357      LOGGER.debug("Failed to parse floating point value", e); 
     358    } 
     359    return 0; 
     360  } 
     361 
    329362} 
Note: See TracChangeset for help on using the changeset viewer.