Changeset 4314


Ignore:
Timestamp:
08/18/08 13:56:39 (12 years ago)
Author:
melissa
Message:

Fixed more bugs exposed by test suite. Also fixed bug in Metamorph STK strip offset calculation.

Location:
trunk/loci/formats
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/TiffTools.java

    r4270 r4314  
    12281228    if (photoInterp == CFA_ARRAY) { 
    12291229      if (colorMap == null) { 
    1230         colorMap = getIFDIntArray(ifd, 37398, true); 
     1230        colorMap = getIFDIntArray(ifd, TiffTools.COLOR_MAP, false); 
     1231        if (colorMap == null) { 
     1232          colorMap = new int[4]; 
     1233          if (littleEndian) { 
     1234            colorMap[0] = 2; 
     1235            colorMap[1] = 0; 
     1236            colorMap[2] = 2; 
     1237            colorMap[3] = 0; 
     1238          } 
     1239          else { 
     1240            colorMap[0] = 0; 
     1241            colorMap[1] = 2; 
     1242            colorMap[2] = 0; 
     1243            colorMap[3] = 2; 
     1244          } 
     1245        } 
    12311246      } 
    12321247      int[] tempMap = new int[colorMap.length + 2]; 
  • trunk/loci/formats/codec/ZlibCodec.java

    r4287 r4314  
    2626import java.io.IOException; 
    2727import java.io.PipedInputStream; 
    28 import java.io.PipedOutputStream; 
    2928import java.util.zip.Deflater; 
    3029import java.util.zip.Inflater; 
     
    3332 
    3433/** 
    35  * This class implements ZLIB decompression. Compression is not yet 
    36  * implemented. 
     34 * This class implements ZLIB decompression. 
    3735 * 
    3836 * <dl><dt><b>Source code:</b></dt> 
     
    4543 
    4644  /** 
    47    * Compresses a block of ZLIB data. Currently not supported. 
     45   * Compresses a block of ZLIB data. 
    4846   * 
    4947   * @param data the data to be compressed 
     
    8179    throws FormatException 
    8280  { 
    83     try { 
    84       Inflater inf = new Inflater(false); 
    85       inf.setInput(input); 
    86       InflaterInputStream i = 
    87         new InflaterInputStream(new PipedInputStream(), inf); 
    88       ByteVector bytes = new ByteVector(); 
    89       byte[] buf = new byte[8192]; 
    90       while (true) { 
     81    Inflater inf = new Inflater(false); 
     82    inf.setInput(input); 
     83    InflaterInputStream i = 
     84      new InflaterInputStream(new PipedInputStream(), inf); 
     85    ByteVector bytes = new ByteVector(); 
     86    byte[] buf = new byte[8192]; 
     87    while (true) { 
     88      try { 
    9189        int r = i.read(buf, 0, buf.length); 
    92         if (r == -1) break; // eof 
     90        if (r <= 0) break; // eof 
    9391        bytes.add(buf, 0, r); 
    9492      } 
    95       return bytes.toByteArray(); 
     93      catch (IOException e) { 
     94        if (bytes.size() == 0) { 
     95          throw new FormatException("Error uncompressing " + 
     96            "ZLIB compressed image strip.", e); 
     97        } 
     98        else break; 
     99      } 
    96100    } 
    97     catch (IOException e) { 
    98       throw new FormatException("Error uncompressing " + 
    99         "ZLIB compressed image strip.", e); 
    100     } 
     101    return bytes.toByteArray(); 
    101102  } 
    102103 
  • trunk/loci/formats/in/InCellReader.java

    r4227 r4314  
    128128    creationDate = null; 
    129129    wellRows = wellCols = 0; 
     130    startRow = startCol = 0; 
     131    fieldCount = zCount = 0; 
    130132  } 
    131133 
  • trunk/loci/formats/in/MINCReader.java

    r4205 r4314  
    6868    FormatTools.checkBufferSize(this, buf.length, w, h); 
    6969 
    70     for (int row=y; row<y+h; row++) { 
    71       System.arraycopy(pixelData[no][row], x, buf, (h - row + y - 1) * w, w); 
     70    if (no < pixelData.length) { 
     71      for (int row=y; row<y+h; row++) { 
     72        if (row < pixelData[no].length && x + w <= pixelData[no][row].length) { 
     73          System.arraycopy(pixelData[no][row], x, buf, 
     74            (h - row + y - 1) * w, w); 
     75        } 
     76      } 
    7277    } 
    7378 
  • trunk/loci/formats/in/MNGReader.java

    r4205 r4314  
    186186      in.seek(offset); 
    187187      long end = ((Long) lengths[0].get(i)).longValue(); 
     188      if (end < offset) continue; 
    188189      byte[] b = new byte[(int) (end - offset + 8)]; 
    189190      in.read(b, 8, b.length - 8); 
     
    216217 
    217218    String[] keys = (String[]) seriesOffsets.keySet().toArray(new String[0]); 
     219 
     220    if (keys.length == 0) { 
     221      throw new FormatException("Pixel data not found."); 
     222    } 
     223 
    218224    core = new CoreMetadata(keys.length); 
    219225    offsets = new Vector[keys.length]; 
  • trunk/loci/formats/in/MetamorphReader.java

    r4272 r4314  
    2828import java.util.*; 
    2929import loci.formats.*; 
     30import loci.formats.meta.*; 
    3031 
    3132/** 
     
    344345      } 
    345346    } 
     347    MetadataStore store = 
     348      new FilterMetadata(getMetadataStore(), isMetadataFiltered()); 
     349    for (int i=0; i<core.imageCount.length; i++) { 
     350      MetadataTools.setDefaultCreationDate(store, id, i); 
     351      store.setImageName("", i); 
     352    } 
     353    MetadataTools.populatePixels(store, this); 
    346354  } 
    347355 
     
    380388      Hashtable[] tempIFDs = new Hashtable[getImageCount()]; 
    381389 
    382       long[] oldOffsets = TiffTools.getIFDLongArray(ifds[0], 
    383           TiffTools.STRIP_OFFSETS, true); 
    384  
    385       long[] stripByteCounts = TiffTools.getIFDLongArray(ifds[0], 
    386           TiffTools.STRIP_BYTE_COUNTS, true); 
    387  
    388       int stripsPerImage = oldOffsets.length; 
    389  
    390       int check = TiffTools.getIFDIntValue(ifds[0], 
    391         TiffTools.PHOTOMETRIC_INTERPRETATION); 
     390      long[] oldOffsets = TiffTools.getStripOffsets(ifds[0]); 
     391      long[] stripByteCounts = TiffTools.getStripByteCounts(ifds[0]); 
     392      int rowsPerStrip = (int) TiffTools.getRowsPerStrip(ifds[0])[0]; 
     393      int stripsPerImage = getSizeY() / rowsPerStrip; 
     394      if (stripsPerImage * rowsPerStrip != getSizeY()) stripsPerImage++; 
     395 
     396      int check = TiffTools.getPhotometricInterpretation(ifds[0]); 
    392397      if (check == TiffTools.RGB_PALETTE) { 
    393398        TiffTools.putIFDValue(ifds[0], TiffTools.PHOTOMETRIC_INTERPRETATION, 
     
    402407 
    403408      Hashtable temp; 
    404       for(int i=0; i<getImageCount(); i++) { 
     409      for (int i=0; i<getImageCount(); i++) { 
    405410        // copy data from the first IFD 
    406411        temp = new Hashtable(ifds[0]); 
     
    408413        // now we need a StripOffsets entry - the original IFD doesn't have this 
    409414 
    410         long planeOffset = i*(oldOffsets[stripsPerImage - 1] + 
    411             stripByteCounts[stripsPerImage - 1] - oldOffsets[0]); 
    412  
    413         long[] newOffsets = new long[oldOffsets.length]; 
    414         newOffsets[0] = planeOffset + oldOffsets[0]; 
    415  
    416         for(int j=1; j<newOffsets.length; j++) { 
    417           newOffsets[j] = newOffsets[j-1] + stripByteCounts[0]; 
     415        long[] newOffsets = new long[stripsPerImage]; 
     416        if (stripsPerImage * i < oldOffsets.length) { 
     417          System.arraycopy(oldOffsets, stripsPerImage * i, newOffsets, 0, 
     418            stripsPerImage); 
     419        } 
     420        else { 
     421          for (int q=0; q<stripsPerImage; q++) { 
     422            newOffsets[q] = 
     423              oldOffsets[stripsPerImage - 1] + q*stripByteCounts[0]; 
     424          } 
    418425        } 
    419426 
    420427        temp.put(new Integer(TiffTools.STRIP_OFFSETS), newOffsets); 
     428 
     429        long[] newByteCounts = new long[stripsPerImage]; 
     430        if (stripsPerImage * i < stripByteCounts.length) { 
     431          System.arraycopy(stripByteCounts, stripsPerImage * i, newByteCounts, 
     432            0, stripsPerImage); 
     433        } 
     434        else { 
     435          Arrays.fill(newByteCounts, stripByteCounts[0]); 
     436        } 
     437        temp.put(new Integer(TiffTools.STRIP_BYTE_COUNTS), newByteCounts); 
    421438 
    422439        tempIFDs[pointer] = temp; 
  • trunk/loci/formats/in/ND2Reader.java

    r4274 r4314  
    143143 
    144144      for (int row=0; row<h; row++) { 
    145         System.arraycopy(t, (row + y) * effectiveX * pixel + x * pixel, 
    146           buf, row * w * pixel, w * pixel); 
     145        int offset = (row + y) * effectiveX * pixel + x * pixel; 
     146        if (offset < t.length) { 
     147          System.arraycopy(t, offset, buf, row * w * pixel, w * pixel); 
     148        } 
    147149      } 
    148150    } 
     
    376378        offsets[seriesIndex][plane] = offset + p.x + 8; 
    377379        b = null; 
     380      } 
     381 
     382      Vector tmpOffsets = new Vector(); 
     383      for (int i=0; i<offsets.length; i++) { 
     384        if (offsets[i][0] > 0) tmpOffsets.add(offsets[i]); 
     385      } 
     386 
     387      offsets = new long[tmpOffsets.size()][]; 
     388      for (int i=0; i<tmpOffsets.size(); i++) { 
     389        offsets[i] = (long[]) tmpOffsets.get(i); 
    378390      } 
    379391 
     
    437449      Arrays.fill(core.falseColor, false); 
    438450      Arrays.fill(core.metadataComplete, true); 
     451 
     452      for (int i=0; i<core.imageCount.length; i++) { 
     453        core.imageCount[i] = core.sizeZ[i] * core.sizeT[i]; 
     454        if (!core.rgb[i]) core.imageCount[i] *= core.sizeC[i]; 
     455      } 
    439456 
    440457      MetadataStore store = 
  • trunk/loci/formats/in/NikonReader.java

    r4205 r4314  
    274274 
    275275    if (cfaPattern != null) { 
    276       realImage.put(new Integer(TiffTools.COLOR_MAP), (int[]) cfaPattern); 
     276      ifds[0].put(new Integer(TiffTools.COLOR_MAP), (int[]) cfaPattern); 
    277277    } 
    278278  } 
  • trunk/loci/formats/in/OMETiffReader.java

    r4205 r4314  
    8080    FormatTools.assertId(currentId, true, 1); 
    8181    return used; 
     82  } 
     83 
     84  /* @see loci.formats.IFormatReader#fileGroupOption() */ 
     85  public int fileGroupOption(String id) { 
     86    return FormatTools.MUST_GROUP; 
    8287  } 
    8388 
Note: See TracChangeset for help on using the changeset viewer.