Changeset 2769


Ignore:
Timestamp:
05/08/07 18:36:52 (13 years ago)
Author:
curtis
Message:

Explode pixel values according to scale factors.

File:
1 edited

Legend:

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

    r2711 r2769  
    7373  { 
    7474    FormatTools.assertId(currentId, true, 1); 
    75     // TODO: expand 8-bit -> 16-bit with multiplication by factor[no] 
    76     return super.openBytes(no, buf); 
     75 
     76    // expand pixel values with multiplication by factor[no] 
     77    byte[] bytes = super.openBytes(no, buf); 
     78    if (core.pixelType[0] == FormatTools.UINT8) { 
     79      int num = bytes.length; 
     80      for (int i=num-1; i>=0; i--) { 
     81        int q = (int) ((bytes[i] & 0xff) * factors[no]); 
     82        bytes[i] = (byte) (q & 0xff); 
     83      } 
     84    } 
     85    if (core.pixelType[0] == FormatTools.UINT16) { 
     86      int num = bytes.length / 2; 
     87      for (int i=num-1; i>=0; i--) { 
     88        int q = (int) ((bytes[i] & 0xff) * factors[no]); 
     89        byte b0 = (byte) (q & 0xff); 
     90        byte b1 = (byte) ((q >> 8) & 0xff); 
     91        int ndx = 2 * i; 
     92        if (core.littleEndian[0]) { 
     93          bytes[ndx] = b0; 
     94          bytes[ndx + 1] = b1; 
     95        } 
     96        else { 
     97          bytes[ndx] = b1; 
     98          bytes[ndx + 1] = b0; 
     99        } 
     100      } 
     101    } 
     102    else if (core.pixelType[0] == FormatTools.UINT32) { 
     103      int num = bytes.length / 4; 
     104      for (int i=num-1; i>=0; i--) { 
     105        int q = (int) ((bytes[i] & 0xff) * factors[no]); 
     106        byte b0 = (byte) (q & 0xff); 
     107        byte b1 = (byte) ((q >> 8) & 0xff); 
     108        byte b2 = (byte) ((q >> 16) & 0xff); 
     109        byte b3 = (byte) ((q >> 24) & 0xff); 
     110        int ndx = 4 * i; 
     111        if (core.littleEndian[0]) { 
     112          bytes[ndx] = b0; 
     113          bytes[ndx + 1] = b1; 
     114          bytes[ndx + 2] = b2; 
     115          bytes[ndx + 3] = b3; 
     116        } 
     117        else { 
     118          bytes[ndx] = b3; 
     119          bytes[ndx + 1] = b2; 
     120          bytes[ndx + 2] = b1; 
     121          bytes[ndx + 3] = b0; 
     122        } 
     123      } 
     124    } 
     125    return bytes; 
    77126  } 
    78127 
     
    80129  public BufferedImage openImage(int no) throws FormatException, IOException { 
    81130    FormatTools.assertId(currentId, true, 1); 
    82     // TODO: expand 8-bit -> 16-bit with multiplication by factor[no] 
    83     return super.openImage(no); 
     131    return ImageTools.makeImage(openBytes(no), core.sizeX[0], core.sizeY[0], 
     132      getRGBChannelCount(), isInterleaved(), 
     133      FormatTools.getBytesPerPixel(core.pixelType[0]), isLittleEndian()); 
    84134  } 
    85135 
     
    122172    // parse factor values 
    123173    factors = new double[core.imageCount[0]]; 
     174    int max = 0; 
    124175    for (int i=0; i<fsize; i++) { 
    125176      String factor = (String) f.get(i); 
     
    134185      } 
    135186      factors[i] = q; 
     187      if (q > factors[max]) max = i; 
    136188    } 
    137189    Arrays.fill(factors, fsize, factors.length, 1); 
     190 
     191    // determine pixel type 
     192    if (factors[max] > 256) core.pixelType[0] = FormatTools.UINT32; 
     193    else if (factors[max] > 1) core.pixelType[0] = FormatTools.UINT16; 
     194    else core.pixelType[0] = FormatTools.UINT8; 
    138195  } 
    139196 
Note: See TracChangeset for help on using the changeset viewer.