Changeset 2651


Ignore:
Timestamp:
04/20/07 12:52:55 (13 years ago)
Author:
melissa
Message:

Provide additional merging options for files with more than 3 channels.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/plugins/Importer.java

    r2598 r2651  
    11231123  } 
    11241124 
     1125  private void makeRGB(ImagePlus imp, IFormatReader r, int c)  
     1126    throws FormatException, IOException  
     1127  { 
     1128    ImageStack s = imp.getStack(); 
     1129    ImageStack newStack = new ImageStack(s.getWidth(), s.getHeight()); 
     1130    for (int i=0; i<s.getSize(); i++) { 
     1131      ImageProcessor p = s.getProcessor(i + 1).convertToByte(true); 
     1132      newStack.addSlice(s.getSliceLabel(i + 1), p); 
     1133    } 
     1134    imp.setStack(imp.getTitle(), newStack); 
     1135    adjustDisplay(imp); 
     1136 
     1137    s = imp.getStack(); 
     1138    newStack = new ImageStack(s.getWidth(), s.getHeight()); 
     1139 
     1140    int sizeZ = r.getSizeZ(); 
     1141    int sizeT = r.getSizeT(); 
     1142 
     1143    for (int z=0; z<sizeZ; z++) { 
     1144      for (int t=0; t<sizeT; t++) { 
     1145        byte[][] bytes = new byte[c][]; 
     1146        for (int ch=0; ch<r.getSizeC()/c; ch++) {  
     1147          for (int ch1=0; ch1<c; ch1++) { 
     1148            int ndx = r.getIndex(z, ch*c + ch1, t) + 1; 
     1149            bytes[ch1] = (byte[]) s.getProcessor(ndx).getPixels(); 
     1150          } 
     1151          ColorProcessor cp = 
     1152            new ColorProcessor(s.getWidth(), s.getHeight()); 
     1153          cp.setRGB(bytes[0], bytes[1], bytes.length == 3 ? bytes[2] : 
     1154            new byte[s.getWidth() * s.getHeight()]); 
     1155          int ndx = r.getIndex(z, ch*c, t) + 1; 
     1156          newStack.addSlice(s.getSliceLabel(ndx), cp); 
     1157        }  
     1158      } 
     1159    } 
     1160    imp.setStack(imp.getTitle(), newStack); 
     1161  } 
     1162 
    11251163  /** Displays the image stack using the appropriate plugin. */ 
    11261164  private void displayStack(ImagePlus imp, IFormatReader r, FileStitcher fs) { 
     
    11341172        (pixelType == FormatTools.UINT8 || pixelType == FormatTools.INT8))  
    11351173      { 
    1136         int c = r.getSizeC(); 
    1137         ImageStack s = imp.getStack(); 
    1138         ImageStack newStack = new ImageStack(s.getWidth(), s.getHeight()); 
    1139         for (int i=0; i<s.getSize(); i++) { 
    1140           ImageProcessor p = s.getProcessor(i + 1).convertToByte(true); 
    1141           newStack.addSlice(s.getSliceLabel(i + 1), p); 
    1142         } 
    1143         imp.setStack(imp.getTitle(), newStack); 
    1144         adjustDisplay(imp); 
    1145  
    1146         s = imp.getStack(); 
    1147         newStack = new ImageStack(s.getWidth(), s.getHeight()); 
    1148  
    1149         int sizeZ = r.getSizeZ(); 
    1150         int sizeT = r.getSizeT(); 
    1151  
    1152         for (int z=0; z<sizeZ; z++) { 
    1153           for (int t=0; t<sizeT; t++) { 
    1154             byte[][] bytes = new byte[c][]; 
    1155             for (int ch1=0; ch1<c; ch1++) { 
    1156               int ndx = r.getIndex(z, ch1, t) + 1; 
    1157               bytes[ch1] = (byte[]) s.getProcessor(ndx).getPixels(); 
    1158             } 
    1159             ColorProcessor cp = 
    1160               new ColorProcessor(s.getWidth(), s.getHeight()); 
    1161             cp.setRGB(bytes[0], bytes[1], bytes.length == 3 ? bytes[2] : 
    1162               new byte[s.getWidth() * s.getHeight()]); 
    1163             int ndx = r.getIndex(z, c - 1, t) + 1; 
    1164             newStack.addSlice(s.getSliceLabel(ndx), cp); 
    1165           } 
    1166         } 
    1167         imp.setStack(imp.getTitle(), newStack); 
     1174        makeRGB(imp, r, r.getSizeC());  
    11681175      } 
    11691176      else if (mergeChannels && r.getSizeC() > 1 && r.getSizeC() < 4 &&  
     
    11811188      } 
    11821189      else if (mergeChannels && r.getSizeC() >= 4) { 
    1183         IJ.showMessage("Can only merge 2 or 3 channels."); 
     1190        // ask the user what they would like to do...  
     1191     
     1192        int planes1 = r.getImageCount() / 2; 
     1193        if (planes1 * 2 < r.getImageCount()) planes1++; 
     1194        int planes2 = r.getImageCount() / 3; 
     1195        if (planes2 * 3 < r.getImageCount()) planes2++; 
     1196 
     1197        GenericDialog gd = new GenericDialog("Merging Options..."); 
     1198        gd.addMessage("How would you like to merge this data?"); 
     1199        gd.addChoice("", new String[] { 
     1200          planes1 + " windows, 2 channels per plane",  
     1201          planes2 + " windows, 3 channels per plane", "Do not merge"}, ""); 
     1202        gd.showDialog(); 
     1203 
     1204        if (gd.wasCanceled()) return; 
     1205         
     1206        int idx = gd.getNextChoiceIndex(); 
     1207      
     1208        switch (idx) { 
     1209          case 0: 
     1210            makeRGB(imp, r, 2); 
     1211            break; 
     1212          case 1: 
     1213            makeRGB(imp, r, 3); 
     1214            break; 
     1215        } 
    11841216      } 
    11851217 
Note: See TracChangeset for help on using the changeset viewer.