Changeset 2144


Ignore:
Timestamp:
01/22/07 08:30:41 (13 years ago)
Author:
melissa
Message:

Fixed off-by-one bug in initMetadata; tweaked initFile to return if the given
id is in the array returned by getUsedFiles(currentId).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/in/LeicaReader.java

    r2143 r2144  
    7777  /** Number of significant bits per pixel. */ 
    7878  private int[][] validBits; 
     79 
     80  /** Name of current LEI file */ 
     81  private String leiFilename; 
    7982 
    8083  // -- Constructor -- 
     
    118121  /** Determines the number of images in the given Leica file. */ 
    119122  public int getImageCount(String id) throws FormatException, IOException { 
    120     if (!id.equals(currentId) && !usedFile(id)) initFile(id); 
     123    if (!id.equals(currentId) && !usedFile(id) && !id.equals(leiFilename)) { 
     124      initFile(id); 
     125    } 
    121126    return numPlanes[series]; 
    122127  } 
     
    124129  /** Return the number of series in the given Leica file. */ 
    125130  public int getSeriesCount(String id) throws FormatException, IOException { 
    126     if (!id.equals(currentId) && !usedFile(id)) initFile(id); 
     131    if (!id.equals(currentId) && !usedFile(id) && !id.equals(leiFilename)) { 
     132      initFile(id); 
     133    } 
    127134    return numSeries; 
    128135  } 
     
    130137  /** Checks if the images in the file are RGB. */ 
    131138  public boolean isRGB(String id) throws FormatException, IOException { 
    132     if (!id.equals(currentId) && !usedFile(id)) initFile(id); 
     139    if (!id.equals(currentId) && !usedFile(id) && !id.equals(leiFilename)) { 
     140      initFile(id); 
     141    } 
    133142    tiff[series][0].setColorTableIgnored(isColorTableIgnored()); 
    134143    return tiff[series][0].isRGB((String) files[series].get(0)); 
     
    137146  /** Return true if the data is in little-endian format. */ 
    138147  public boolean isLittleEndian(String id) throws FormatException, IOException { 
    139     if (!id.equals(currentId) && !usedFile(id)) initFile(id); 
     148    if (!id.equals(currentId) && !usedFile(id) && !id.equals(leiFilename)) { 
     149      initFile(id); 
     150    }  
    140151    return littleEndian; 
    141152  } 
     
    150161    throws FormatException, IOException 
    151162  { 
    152     if (!id.equals(currentId) && !usedFile(id)) initFile(id); 
     163    if (!id.equals(currentId) && !usedFile(id) && !id.equals(leiFilename)) { 
     164      initFile(id); 
     165    } 
    153166 
    154167    if (no < 0 || no >= getImageCount(id)) { 
     
    165178    throws FormatException, IOException 
    166179  { 
    167     if (!id.equals(currentId) && !usedFile(id)) initFile(id); 
     180    if (!id.equals(currentId) && !usedFile(id) && !id.equals(leiFilename)) { 
     181      initFile(id); 
     182    } 
    168183 
    169184    if (no < 0 || no >= getImageCount(id)) { 
     
    183198  /* @see IFormatReader#getUsedFiles(String) */ 
    184199  public String[] getUsedFiles(String id) throws FormatException, IOException { 
    185     if (!id.equals(currentId) && !usedFile(id)) initFile(id); 
     200    if (!id.equals(currentId) && !usedFile(id) && !id.equals(leiFilename)) { 
     201      initFile(id); 
     202    } 
    186203    Vector v = new Vector(); 
    187     v.add(id); 
     204    v.add(leiFilename); 
    188205    for (int i=0; i<files.length; i++) { 
    189206      for (int j=0; j<files[i].size(); j++) { 
     
    212229  /** Initializes the given Leica file. */ 
    213230  protected void initFile(String id) throws FormatException, IOException { 
     231    if (id.equals(currentId) || id.equals(leiFilename) || usedFile(id)) return; 
    214232    if (debug) debug("LeicaReader.initFile(" + id + ")"); 
    215233    String idLow = id.toLowerCase(); 
     
    229247 
    230248      ifds = TiffTools.getIFDs(in); 
    231       try { 
    232         super.initMetadata(); 
    233       } 
    234       catch (NullPointerException n) { 
    235         if (debug) n.printStackTrace(); 
    236       } 
    237  
    238249      if (ifds == null) throw new FormatException("No IFDs found"); 
    239  
    240       String descr = (String) getMeta("Comment"); 
    241       metadata.remove("Comment"); 
     250      String descr = (String) TiffTools.getIFDValue(ifds[0],  
     251        TiffTools.IMAGE_DESCRIPTION); 
    242252 
    243253      int ndx = descr.indexOf("Series Name"); 
     
    312322      } 
    313323 
     324      leiFilename = id; 
    314325      in = new RandomAccessStream(id); 
    315326 
     
    503514              for (int k=0; k<ks.length; k++) { 
    504515                files[i].add(h.get(ks[k])); 
    505                 /* debug */ System.out.println("adding " + h.get(ks[k]) +  
    506                   " to series " + i); 
    507516              } 
    508517            } 
     
    810819 
    811820      temp = (byte[]) headerIFDs[i].get(new Integer(40)); 
     821       
    812822      if (temp != null) { 
    813823        // time data 
    814824        // ID_TIMEINFO 
    815825        try { 
    816           addMeta("Number of time-stamped dimensions", 
    817             new Integer(DataTools.bytesToInt(temp, 0, 4, littleEndian))); 
    818           int nDims = DataTools.bytesToInt(temp, 4, 4, littleEndian); 
    819           addMeta("Time-stamped dimension", new Integer(nDims)); 
     826          int nDims = DataTools.bytesToInt(temp, 0, 4, littleEndian); 
     827          addMeta("Number of time-stamped dimensions", new Integer(nDims)); 
     828          addMeta("Time-stamped dimension",  
     829            new Integer(DataTools.bytesToInt(temp, 4, 4, littleEndian))); 
    820830 
    821831          int pt = 8; 
     
    10661076  private boolean usedFile(String s) { 
    10671077    if (files == null) return false; 
     1078 
    10681079    for (int i=0; i<files.length; i++) { 
    10691080      if (files[i] == null) continue; 
    1070       if (files[i].contains(s)) return true; 
     1081      for (int j=0; j<files[i].size(); j++) { 
     1082        if (((String) files[i].get(j)).endsWith(s)) return true; 
     1083      } 
    10711084    } 
    10721085    return false; 
Note: See TracChangeset for help on using the changeset viewer.