Changeset 2867


Ignore:
Timestamp:
06/14/07 09:36:19 (12 years ago)
Author:
melissa
Message:

Fixed how ImageTools.splitChannels(byte[], ...) handles multiple bytes per channel.

Location:
trunk/loci/formats
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/ChannelSeparator.java

    r2796 r2867  
    8686    } 
    8787 
    88     int bytes = 0; 
    89     switch (getPixelType()) { 
    90       case 0: 
    91       case 1: 
    92         bytes = 1; 
    93         break; 
    94       case 2: 
    95       case 3: 
    96         bytes = 2; 
    97         break; 
    98       case 4: 
    99       case 5: 
    100       case 6: 
    101         bytes = 4; 
    102         break; 
    103       case 7: 
    104         bytes = 8; 
    105         break; 
    106     } 
     88    int bytes = FormatTools.getBytesPerPixel(getPixelType()); 
    10789 
    10890    byte[] b = openBytes(no); 
     
    141123      } 
    142124 
    143       return ImageTools.splitChannels(lastImage, c, 
     125      return ImageTools.splitChannels(lastImage, c,  
     126        FormatTools.getBytesPerPixel(getPixelType()), 
    144127        false, isInterleaved())[channel]; 
    145128    } 
  • trunk/loci/formats/ImageTools.java

    r2857 r2867  
    10261026   * channels are in BGR order. 
    10271027   */ 
    1028   public static byte[][] splitChannels(byte[] array, int c, boolean reverse, 
    1029     boolean interleaved) 
     1028  public static byte[][] splitChannels(byte[] array, int c, int bytes,  
     1029    boolean reverse, boolean interleaved) 
    10301030  { 
    10311031    byte[][] rtn = new byte[c][array.length / c]; 
     
    10481048      if (reverse) { 
    10491049        int next = 0; 
    1050         for (int i=0; i<array.length; i+=c) { 
     1050        for (int i=0; i<array.length; i+=c*bytes) { 
    10511051          for (int j=c-1; j>=0; j--) { 
    1052             rtn[j][next] = array[i + j]; 
    1053           } 
    1054           next++; 
     1052            for (int k=0; k<bytes; k++) { 
     1053              if (next < rtn[j].length) { 
     1054                rtn[c - j - 1][next] = array[i + j*bytes + k]; 
     1055              }  
     1056              next++;  
     1057            } 
     1058            next -= bytes;  
     1059          }  
     1060          next += bytes;  
    10551061        } 
    10561062      } 
    10571063      else { 
    10581064        int next = 0; 
    1059         for (int i=0; i<array.length; i+=c) { 
     1065        for (int i=0; i<array.length; i+=c*bytes) { 
    10601066          for (int j=0; j<c; j++) { 
    1061             if (next < rtn[j].length) rtn[j][next] = array[i + j]; 
    1062           } 
    1063           next++; 
     1067            for (int k=0; k<bytes; k++) { 
     1068              if (next < rtn[j].length) rtn[j][next] = array[i + j*bytes + k]; 
     1069              next++;  
     1070            } 
     1071            next -= bytes;  
     1072          }  
     1073          next += bytes;  
    10641074        } 
    10651075      } 
  • trunk/loci/formats/in/LeicaReader.java

    r2858 r2867  
    127127      FormatTools.getBytesPerPixel(core.pixelType[series])); 
    128128 
    129     b = ImageTools.splitChannels(b, c, false, 
     129    b = ImageTools.splitChannels(b, c,  
     130      FormatTools.getBytesPerPixel(core.pixelType[series]), false, 
    130131      isInterleaved())[channelIndices[ndx]]; 
    131132    tiff[series][no].close(); 
     
    148149    int c = buf.length / (core.sizeX[series] * core.sizeY[series] * 
    149150      FormatTools.getBytesPerPixel(core.pixelType[series])); 
    150     buf = ImageTools.splitChannels(buf, c, false, 
     151    buf = ImageTools.splitChannels(buf, c,  
     152      FormatTools.getBytesPerPixel(core.pixelType[series]), false, 
    151153      isInterleaved())[channelIndices[ndx]]; 
    152154    return buf; 
  • trunk/loci/formats/ome/OMEWriter.java

    r2857 r2867  
    190190        FormatTools.getBytesPerPixel(pixelType); 
    191191      byte[][] b = ImageTools.splitChannels(bytes, bytes.length / planeLength, 
    192         false, true); 
     192        FormatTools.getBytesPerPixel(pixelType), false, true); 
    193193 
    194194      for (int ch=0; ch<b.length; ch++) { 
Note: See TracChangeset for help on using the changeset viewer.