Changeset 4114


Ignore:
Timestamp:
06/13/08 13:29:31 (12 years ago)
Author:
melissa
Message:

Fix for binned data.

File:
1 edited

Legend:

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

    r4058 r4114  
    6161  protected double[] factors; 
    6262 
     63  /** Camera binning values. */ 
     64  private int binX, binY; 
     65 
    6366  // -- Constructor -- 
    6467 
     
    8083    // expand pixel values with multiplication by factor[no] 
    8184    byte[] bytes = super.openBytes(no, buf, x, y, w, h); 
    82     if (core.pixelType[0] == FormatTools.UINT8) { 
    83       int num = bytes.length; 
     85 
     86    if (binX > 1) { 
     87      // actually 8 bit data 
     88      int num = bytes.length / binX; 
     89      byte[] t = new byte[bytes.length]; 
     90      System.arraycopy(bytes, 0, t, 0, t.length); 
     91      Arrays.fill(bytes, (byte) 0); 
     92      int bpp = FormatTools.getBytesPerPixel(core.pixelType[0]); 
    8493      for (int i=num-1; i>=0; i--) { 
    85         int q = (int) ((bytes[i] & 0xff) * factors[no]); 
    86         bytes[i] = (byte) (q & 0xff); 
    87       } 
    88     } 
    89     if (core.pixelType[0] == FormatTools.UINT16) { 
    90       int num = bytes.length / 2; 
    91       for (int i=num-1; i>=0; i--) { 
    92         int q = nBytes == 1 ? (int) ((bytes[i] & 0xff) * factors[no]) : 
    93           (int) (DataTools.bytesToInt(bytes, i*2, 2, core.littleEndian[0]) * 
    94           factors[no]); 
    95         DataTools.unpackBytes(q, bytes, i * 2, 2, core.littleEndian[0]); 
    96       } 
    97     } 
    98     else if (core.pixelType[0] == FormatTools.UINT32) { 
    99       int num = bytes.length / 4; 
    100       for (int i=num-1; i>=0; i--) { 
    101         int q = nBytes == 1 ? (int) ((bytes[i] & 0xff) * factors[no]) : 
    102           (int) (DataTools.bytesToInt(bytes, i*4, nBytes, 
    103           core.littleEndian[0]) * factors[no]); 
    104         DataTools.unpackBytes(q, bytes, i * 4, 4, core.littleEndian[0]); 
    105       } 
    106     } 
    107     return bytes; 
     94        int q = (int) ((t[i] & 0xff) * factors[no]); 
     95        DataTools.unpackBytes(q, bytes, i * bpp, bpp, core.littleEndian[0]); 
     96      } 
     97    } 
     98    else { 
     99      if (core.pixelType[0] == FormatTools.UINT8) { 
     100        int num = bytes.length; 
     101        for (int i=num-1; i>=0; i--) { 
     102          int q = (int) ((bytes[i] & 0xff) * factors[no]); 
     103          bytes[i] = (byte) (q & 0xff); 
     104        } 
     105      } 
     106      else if (core.pixelType[0] == FormatTools.UINT16) { 
     107        int num = bytes.length / 2; 
     108        for (int i=num-1; i>=0; i--) { 
     109          int q = nBytes == 1 ? (int) ((bytes[i] & 0xff) * factors[no]) : 
     110            (int) (DataTools.bytesToInt(bytes, i*2, 2, core.littleEndian[0]) * 
     111            factors[no]); 
     112          DataTools.unpackBytes(q, bytes, i * 2, 2, core.littleEndian[0]); 
     113        } 
     114      } 
     115      else if (core.pixelType[0] == FormatTools.UINT32) { 
     116        int num = bytes.length / 4; 
     117        for (int i=num-1; i>=0; i--) { 
     118          int q = nBytes == 1 ? (int) ((bytes[i] & 0xff) * factors[no]) : 
     119            (int) (DataTools.bytesToInt(bytes, i*4, nBytes, 
     120            core.littleEndian[0]) * factors[no]); 
     121          DataTools.unpackBytes(q, bytes, i * 4, 4, core.littleEndian[0]); 
     122        } 
     123      } 
     124    } 
     125    System.arraycopy(bytes, 0, buf, 0, bytes.length); 
     126    return buf; 
    108127  } 
    109128 
     
    277296          store.setDimensionsPhysicalSizeY(new Float(value), nextImage - 1, 0); 
    278297        } 
     298        else if (currentQName.equals("CameraBinningX")) { 
     299          binX = Integer.parseInt(value); 
     300        } 
     301        else if (currentQName.equals("CameraBinningY")) { 
     302          binY = Integer.parseInt(value); 
     303        } 
    279304      } 
    280305      else if (parentQName.equals("Well")) { 
     
    433458        } 
    434459        nextImage++; 
     460 
     461        String x = attributes.getValue("CameraBinningX"); 
     462        String y = attributes.getValue("CameraBinningY"); 
     463        if (x != null) binX = Integer.parseInt(x); 
     464        if (y != null) binY = Integer.parseInt(y); 
    435465      } 
    436466      else if (qName.equals("Plate") || qName.equals("WellShape") || 
Note: See TracChangeset for help on using the changeset viewer.