Changeset 2844


Ignore:
Timestamp:
06/05/07 14:29:01 (13 years ago)
Author:
melissa
Message:

If there is a TIFF preview, read it instead of the PostScript image.

File:
1 edited

Legend:

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

    r2842 r2844  
    2727import java.awt.image.BufferedImage; 
    2828import java.io.*; 
     29import java.util.Hashtable; 
    2930import java.util.StringTokenizer; 
    3031import loci.formats.*; 
     
    4950  private boolean binary; 
    5051 
     52  private boolean isTiff; 
     53  private Hashtable[] ifds; 
     54 
    5155  // -- Constructor -- 
    5256 
     
    6064  /* @see loci.formats.IFormatReader#isThisType(byte[]) */ 
    6165  public boolean isThisType(byte[] block) { 
    62     return new String(block).trim().startsWith("%!PS");  
     66    return false;  
    6367  } 
    6468 
     
    7983      throw new FormatException("Invalid image number: " + no); 
    8084    } 
    81     if (buf.length < core.sizeX[0]*core.sizeY[0] * core.sizeC[0] * (bps / 8)) { 
     85    if (buf.length < core.sizeX[0] * core.sizeY[0] * core.sizeC[0] * (bps / 8)) { 
    8286      throw new FormatException("Buffer too small."); 
     87    } 
     88 
     89    if (isTiff) { 
     90      long[] offsets = TiffTools.getStripOffsets(ifds[0]); 
     91      in.seek(offsets[0]); 
     92      
     93      int[] map = TiffTools.getIFDIntArray(ifds[0], TiffTools.COLOR_MAP, false);  
     94      if (map == null) { 
     95        in.read(buf); 
     96        return buf;  
     97      } 
     98 
     99      byte[] b = new byte[core.sizeX[0] * core.sizeY[0]]; 
     100      for (int i=0; i<b.length; i++) { 
     101        b[i] = (byte) in.read(); 
     102        in.read();  
     103      } 
     104 
     105      for (int i=0; i<b.length; i++) { 
     106        int ndx = b[i];  
     107        if (ndx < 0) ndx += 256;  
     108        for (int j=0; j<core.sizeC[0]; j++) { 
     109          buf[i*core.sizeC[0] + j] = (byte) map[ndx + j*256]; 
     110        } 
     111      } 
     112       
     113      return buf;  
    83114    } 
    84115 
     
    119150    FormatTools.assertId(currentId, true, 1); 
    120151    return ImageTools.makeImage(openBytes(no), core.sizeX[0], core.sizeY[0], 
    121       isRGB() ? 3 : 1, true); 
     152      core.sizeC[0], core.interleaved[0],  
     153      FormatTools.getBytesPerPixel(core.pixelType[0]), core.littleEndian[0]); 
    122154  } 
    123155 
     
    134166    String line = in.readLine(); 
    135167    if (!line.trim().startsWith("%!PS")) { 
    136       throw new FormatException("Invalid EPS file."); 
     168      // read the TIFF preview  
     169     
     170      isTiff = true; 
     171 
     172      in.order(true); 
     173      in.seek(20); 
     174      int offset = in.readInt(); 
     175      int len = in.readInt(); 
     176 
     177      byte[] b = new byte[len]; 
     178      in.seek(offset); 
     179      in.read(b); 
     180 
     181      in = new RandomAccessStream(b); 
     182      ifds = TiffTools.getIFDs(in); 
     183 
     184      core.sizeX[0] = (int) TiffTools.getImageWidth(ifds[0]); 
     185      core.sizeY[0] = (int) TiffTools.getImageLength(ifds[0]); 
     186      core.sizeZ[0] = 1; 
     187      core.sizeT[0] = 1; 
     188      core.sizeC[0] = TiffTools.getSamplesPerPixel(ifds[0]); 
     189      if (core.sizeC[0] == 2) core.sizeC[0] = 3;  
     190      core.littleEndian[0] = TiffTools.isLittleEndian(ifds[0]); 
     191      core.interleaved[0] = true; 
     192      core.rgb[0] = core.sizeC[0] > 1; 
     193       
     194      bps = TiffTools.getBitsPerSample(ifds[0])[0]; 
     195      switch (bps) { 
     196        case 16: core.pixelType[0] = FormatTools.UINT16; break;  
     197        case 32: core.pixelType[0] = FormatTools.UINT32; break;  
     198        default: core.pixelType[0] = FormatTools.UINT8;  
     199      }  
     200    
     201      core.imageCount[0] = 1; 
     202      core.currentOrder[0] = "XYCZT"; 
     203 
     204      return;  
    137205    } 
    138206 
Note: See TracChangeset for help on using the changeset viewer.