Changeset 3419


Ignore:
Timestamp:
11/28/07 13:10:08 (12 years ago)
Author:
melissa
Message:

Corrected pixel type detection.

File:
1 edited

Legend:

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

    r3363 r3419  
    7373 
    7474  private int previousSeries; 
    75   private byte[][][] previousImage; 
     75  private Object previousImage; 
    7676  private int previousImageNumber; 
    7777  private Vector channelParameters; 
     
    116116        r.exec("pixelData = var.read()"); 
    117117        r.exec("data = pixelData.copyToNDJavaArray()"); 
    118         previousImage = (byte[][][]) r.getVar("data"); 
     118        previousImage = r.getVar("data"); 
    119119      } 
    120120      catch (ReflectException exc) { 
     
    126126 
    127127    for (int y=0; y<core.sizeY[series]; y++) { 
    128       System.arraycopy(previousImage[zct[0]][y], 0, buf, y*core.sizeX[series], 
    129         core.sizeX[series]); 
     128      if (previousImage instanceof byte[][][]) { 
     129        System.arraycopy(((byte[][][]) previousImage)[zct[0]][y], 0, buf, 
     130          y*core.sizeX[series], core.sizeX[series]); 
     131      } 
     132      else if (previousImage instanceof short[][][]) { 
     133        short[] s = ((short[][][]) previousImage)[zct[0]][y]; 
     134        for (int i=0; i<core.sizeX[series]; i++) { 
     135          buf[y*core.sizeX[series]*2 + i*2] = (byte) ((s[i] >> 8) & 0xff); 
     136          buf[y*core.sizeX[series]*2 + i*2 + 1] = (byte) (s[i] & 0xff); 
     137        } 
     138      } 
     139      else if (previousImage instanceof int[][][]) { 
     140        int[] s = ((int[][][]) previousImage)[zct[0]][y]; 
     141        for (int i=0; i<core.sizeX[series]; i++) { 
     142          buf[y*core.sizeX[series]*4 + i*4] = (byte) ((s[i] >> 24) & 0xff); 
     143          buf[y*core.sizeX[series]*4 + i*4 + 1] = (byte) ((s[i] >> 16) & 0xff); 
     144          buf[y*core.sizeX[series]*4 + i*4 + 2] = (byte) ((s[i] >> 8) & 0xff); 
     145          buf[y*core.sizeX[series]*4 + i*4 + 3] = (byte) (s[i] & 0xff); 
     146        } 
     147      } 
     148      else if (previousImage instanceof float[][][]) { 
     149        float[] s = ((float[][][]) previousImage)[zct[0]][y]; 
     150        for (int i=0; i<core.sizeX[series]; i++) { 
     151          int v = Float.floatToIntBits(s[i]); 
     152          buf[y*core.sizeX[series]*4 + i*4] = (byte) ((v >> 24) & 0xff); 
     153          buf[y*core.sizeX[series]*4 + i*4 + 1] = (byte) ((v >> 16) & 0xff); 
     154          buf[y*core.sizeX[series]*4 + i*4 + 2] = (byte) ((v >> 8) & 0xff); 
     155          buf[y*core.sizeX[series]*4 + i*4 + 3] = (byte) (v & 0xff); 
     156        } 
     157      } 
    130158    } 
    131159    previousSeries = series; 
     
    218246    } 
    219247 
     248    try { 
     249      findGroup("ResolutionLevel_0", "dataSet", "g"); 
     250      findGroup("TimePoint_0", "g", "g"); 
     251      findGroup("Channel_0", "g", "g"); 
     252      r.setVar("name", "Data"); 
     253      r.exec("var = g.findVariable(name)"); 
     254      r.exec("pixelData = var.read()"); 
     255      r.exec("data = pixelData.copyToNDJavaArray()"); 
     256      Object pix = r.getVar("data"); 
     257      if (pix instanceof byte[][][]) { 
     258        Arrays.fill(core.pixelType, FormatTools.UINT8); 
     259      } 
     260      else if (pix instanceof short[][][]) { 
     261        Arrays.fill(core.pixelType, FormatTools.UINT16); 
     262      } 
     263      else if (pix instanceof int[][][]) { 
     264        Arrays.fill(core.pixelType, FormatTools.UINT32); 
     265      } 
     266      else if (pix instanceof float[][][]) { 
     267        Arrays.fill(core.pixelType, FormatTools.FLOAT); 
     268      } 
     269    } 
     270    catch (ReflectException exc) { 
     271      if (debug) LogTools.trace(exc); 
     272    } 
     273 
    220274    Arrays.fill(core.currentOrder, "XYZCT"); 
    221275    Arrays.fill(core.rgb, false); 
    222276    Arrays.fill(core.thumbSizeX, 128); 
    223277    Arrays.fill(core.thumbSizeY, 128); 
    224     Arrays.fill(core.pixelType, FormatTools.UINT8); 
    225278    Arrays.fill(core.imageCount, core.sizeZ[0] * core.sizeC[0] * core.sizeT[0]); 
    226279    Arrays.fill(core.orderCertain, true); 
Note: See TracChangeset for help on using the changeset viewer.