Changeset 7041


Ignore:
Timestamp:
10/07/10 10:29:20 (9 years ago)
Author:
melissa
Message:

Added support for pixel types other than uint8.

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/4.2/components/bio-formats/src/loci/formats/in/MINCReader.java

    r7007 r7041  
    2929import java.util.Vector; 
    3030 
     31import loci.common.DataTools; 
    3132import loci.common.services.DependencyException; 
    3233import loci.common.services.ServiceException; 
     
    7273    FormatTools.checkPlaneParameters(this, no, buf.length, x, y, w, h); 
    7374 
     75    int bpp = FormatTools.getBytesPerPixel(getPixelType()); 
     76 
    7477    if (no < pixelData.length) { 
    7578      for (int row=y; row<y+h; row++) { 
    7679        if (row < pixelData[no].length && x + w <= pixelData[no][row].length) { 
    77           System.arraycopy(pixelData[no][row], x, buf, 
    78             (h - row + y - 1) * w, w); 
     80          System.arraycopy(pixelData[no][row], x * bpp, buf, 
     81            (h - row + y - 1) * w * bpp, w * bpp); 
    7982        } 
    8083      } 
     
    131134 
    132135    try { 
    133       pixelData = (byte[][][]) netcdf.getVariableValue("/image"); 
     136      Object pixels = netcdf.getVariableValue("/image"); 
     137      if (pixels instanceof byte[][][]) { 
     138        core[0].pixelType = FormatTools.UINT8; 
     139        pixelData = (byte[][][]) pixels; 
     140      } 
     141      else if (pixels instanceof short[][][]) { 
     142        core[0].pixelType = FormatTools.UINT16; 
     143 
     144        short[][][] s = (short[][][]) pixels; 
     145        pixelData = new byte[s.length][][]; 
     146        for (int i=0; i<s.length; i++) { 
     147          pixelData[i] = new byte[s[i].length][]; 
     148          for (int j=0; j<s[i].length; j++) { 
     149            pixelData[i][j] = 
     150              DataTools.shortsToBytes(s[i][j], isLittleEndian()); 
     151          } 
     152        } 
     153      } 
     154      else if (pixels instanceof int[][][]) { 
     155        core[0].pixelType = FormatTools.UINT32; 
     156 
     157        int[][][] s = (int[][][]) pixels; 
     158        pixelData = new byte[s.length][][]; 
     159        for (int i=0; i<s.length; i++) { 
     160          pixelData[i] = new byte[s[i].length][]; 
     161          for (int j=0; j<s[i].length; j++) { 
     162            pixelData[i][j] = DataTools.intsToBytes(s[i][j], isLittleEndian()); 
     163          } 
     164        } 
     165      } 
     166      else if (pixels instanceof float[][][]) { 
     167        core[0].pixelType = FormatTools.FLOAT; 
     168 
     169        float[][][] s = (float[][][]) pixels; 
     170        pixelData = new byte[s.length][][]; 
     171        for (int i=0; i<s.length; i++) { 
     172          pixelData[i] = new byte[s[i].length][]; 
     173          for (int j=0; j<s[i].length; j++) { 
     174            pixelData[i][j] = 
     175              DataTools.floatsToBytes(s[i][j], isLittleEndian()); 
     176          } 
     177        } 
     178      } 
     179      else if (pixels instanceof double[][][]) { 
     180        core[0].pixelType = FormatTools.DOUBLE; 
     181 
     182        double[][][] s = (double[][][]) pixels; 
     183        pixelData = new byte[s.length][][]; 
     184        for (int i=0; i<s.length; i++) { 
     185          pixelData[i] = new byte[s[i].length][]; 
     186          for (int j=0; j<s[i].length; j++) { 
     187            pixelData[i][j] = 
     188              DataTools.doublesToBytes(s[i][j], isLittleEndian()); 
     189          } 
     190        } 
     191      } 
    134192    } 
    135193    catch (ServiceException e) { 
     
    147205    core[0].indexed = false; 
    148206    core[0].dimensionOrder = "XYZCT"; 
    149     core[0].pixelType = FormatTools.UINT8; 
    150207 
    151208    addGlobalMeta("Comment", netcdf.getAttributeValue("/history")); 
  • trunk/components/bio-formats/src/loci/formats/in/MINCReader.java

    r6881 r7041  
    2929import java.util.Vector; 
    3030 
     31import loci.common.DataTools; 
    3132import loci.common.services.DependencyException; 
    3233import loci.common.services.ServiceException; 
     
    7273    FormatTools.checkPlaneParameters(this, no, buf.length, x, y, w, h); 
    7374 
     75    int bpp = FormatTools.getBytesPerPixel(getPixelType()); 
     76 
    7477    if (no < pixelData.length) { 
    7578      for (int row=y; row<y+h; row++) { 
    7679        if (row < pixelData[no].length && x + w <= pixelData[no][row].length) { 
    77           System.arraycopy(pixelData[no][row], x, buf, 
    78             (h - row + y - 1) * w, w); 
     80          System.arraycopy(pixelData[no][row], x * bpp, buf, 
     81            (h - row + y - 1) * w * bpp, w * bpp); 
    7982        } 
    8083      } 
     
    131134 
    132135    try { 
    133       pixelData = (byte[][][]) netcdf.getVariableValue("/image"); 
     136      Object pixels = netcdf.getVariableValue("/image"); 
     137      if (pixels instanceof byte[][][]) { 
     138        core[0].pixelType = FormatTools.UINT8; 
     139        pixelData = (byte[][][]) pixels; 
     140      } 
     141      else if (pixels instanceof short[][][]) { 
     142        core[0].pixelType = FormatTools.UINT16; 
     143 
     144        short[][][] s = (short[][][]) pixels; 
     145        pixelData = new byte[s.length][][]; 
     146        for (int i=0; i<s.length; i++) { 
     147          pixelData[i] = new byte[s[i].length][]; 
     148          for (int j=0; j<s[i].length; j++) { 
     149            pixelData[i][j] = 
     150              DataTools.shortsToBytes(s[i][j], isLittleEndian()); 
     151          } 
     152        } 
     153      } 
     154      else if (pixels instanceof int[][][]) { 
     155        core[0].pixelType = FormatTools.UINT32; 
     156 
     157        int[][][] s = (int[][][]) pixels; 
     158        pixelData = new byte[s.length][][]; 
     159        for (int i=0; i<s.length; i++) { 
     160          pixelData[i] = new byte[s[i].length][]; 
     161          for (int j=0; j<s[i].length; j++) { 
     162            pixelData[i][j] = DataTools.intsToBytes(s[i][j], isLittleEndian()); 
     163          } 
     164        } 
     165      } 
     166      else if (pixels instanceof float[][][]) { 
     167        core[0].pixelType = FormatTools.FLOAT; 
     168 
     169        float[][][] s = (float[][][]) pixels; 
     170        pixelData = new byte[s.length][][]; 
     171        for (int i=0; i<s.length; i++) { 
     172          pixelData[i] = new byte[s[i].length][]; 
     173          for (int j=0; j<s[i].length; j++) { 
     174            pixelData[i][j] = 
     175              DataTools.floatsToBytes(s[i][j], isLittleEndian()); 
     176          } 
     177        } 
     178      } 
     179      else if (pixels instanceof double[][][]) { 
     180        core[0].pixelType = FormatTools.DOUBLE; 
     181 
     182        double[][][] s = (double[][][]) pixels; 
     183        pixelData = new byte[s.length][][]; 
     184        for (int i=0; i<s.length; i++) { 
     185          pixelData[i] = new byte[s[i].length][]; 
     186          for (int j=0; j<s[i].length; j++) { 
     187            pixelData[i][j] = 
     188              DataTools.doublesToBytes(s[i][j], isLittleEndian()); 
     189          } 
     190        } 
     191      } 
    134192    } 
    135193    catch (ServiceException e) { 
     
    147205    core[0].indexed = false; 
    148206    core[0].dimensionOrder = "XYZCT"; 
    149     core[0].pixelType = FormatTools.UINT8; 
    150207 
    151208    addGlobalMeta("Comment", netcdf.getAttributeValue("/history")); 
Note: See TracChangeset for help on using the changeset viewer.