Changeset 3459


Ignore:
Timestamp:
12/10/07 15:06:51 (12 years ago)
Author:
melissa
Message:

Updated to take advantage of new features in ImageJ's CompositeImage - can now merge up to 7 channels. As a result, CustomImage is obsolete.

Location:
trunk/loci/plugins
Files:
1 deleted
6 edited

Legend:

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

    r3416 r3459  
    3232import ij.process.*; 
    3333import java.awt.image.IndexColorModel; 
     34import java.io.ByteArrayOutputStream; 
     35import java.io.PrintStream; 
    3436import java.util.Arrays; 
    3537import loci.formats.*; 
    3638 
    3739public class Colorizer implements PlugInFilter { 
     40 
     41  // -- Static fields -- 
     42 
     43  private static ReflectedUniverse r = createReflectedUniverse(); 
     44  private static ReflectedUniverse createReflectedUniverse() { 
     45    r = null; 
     46    try { 
     47      r = new ReflectedUniverse(); 
     48      r.exec("import ij.CompositeImage"); 
     49    } 
     50    catch (ReflectException exc) { 
     51      IJ.error("Please upgrade to ImageJ 1.39l or later."); 
     52    } 
     53    return r; 
     54  } 
    3855 
    3956  // -- Fields -- 
     
    107124    int nSlices = imp.getNSlices(); 
    108125 
    109     if (imp instanceof CompositeImage || imp instanceof CustomImage || 
    110       stack.isRGB() || (nChannels == 1 && !color)) 
     126    Class c = null; 
     127    try { 
     128      c = Class.forName("ij.CompositeImage"); 
     129    } 
     130    catch (ClassNotFoundException e) { } 
     131 
     132    if (imp.getClass().equals(c) || stack.isRGB() || 
     133      (nChannels == 1 && !color)) 
    111134    { 
    112135      return; 
     
    139162        newImp = makeRGB(newImp, stack, nChannels); 
    140163      } 
    141       else if (nChannels <= 4 && type != ImagePlus.COLOR_256) { 
    142         // use compareTo instead of IJ.versionLessThan(...), because we want 
    143         // to suppress the error message 
    144         if (imp.getStackSize() == nChannels && 
    145           ImageJ.VERSION.compareTo("1.38n") < 0) 
    146         { 
     164      else if (nChannels <= 7 && type != ImagePlus.COLOR_256) { 
     165        if (!IJ.versionLessThan("1.39l")) { 
    147166          // use reflection to construct CompositeImage, 
    148167          // in case ImageJ version is too old 
    149           ReflectedUniverse ru = new ReflectedUniverse(); 
    150168          try { 
    151             ru.exec("import ij.CompositeImage"); 
    152             ru.setVar("imp", imp); 
    153             ru.setVar("sizeC", nChannels); 
    154             newImp = (ImagePlus) ru.exec("new CompositeImage(imp, sizeC)"); 
     169            r.setVar("imp", imp); 
     170            newImp = (ImagePlus) 
     171              r.exec("new CompositeImage(imp, CompositeImage.COMPOSITE)"); 
    155172          } 
    156173          catch (ReflectException exc) { 
    157             newImp = new CustomImage(imp, stackOrder, nSlices, 
    158               nTimes, nChannels, true); 
    159           } 
    160         } 
    161         else { 
    162           newImp = new CustomImage(imp, stackOrder, nSlices, 
    163             nTimes, nChannels, true); 
    164         } 
    165       } 
    166       else if (nChannels > 4) { 
     174            ByteArrayOutputStream s = new ByteArrayOutputStream(); 
     175            exc.printStackTrace(new PrintStream(s)); 
     176            IJ.error(s.toString()); 
     177          } 
     178        } 
     179      } 
     180      else if (nChannels > 7) { 
    167181        // ask the user what they would like to do... 
    168182 
     
    174188        if (planes3 * 4 < stack.getSize()) planes3++; 
    175189 
     190        int[] num = new int[6]; 
     191        for (int i=0; i<num.length; i++) { 
     192          num[i] = stack.getSize() / (i + 2); 
     193          if (num[i] * (i + 2) < stack.getSize()) num[i]++; 
     194        } 
     195 
    176196        ImporterOptions options = new ImporterOptions(); 
    177197 
    178198        if (mergeOption == null) { 
    179           int status = options.promptMergeOption(planes1, planes2, planes3); 
     199          int status = options.promptMergeOption(num); 
    180200          if (status == ImporterOptions.STATUS_OK) { 
    181201            mergeOption = options.getMergeOption(); 
    182202          } 
    183203        } 
    184         if (mergeOption != null) { 
    185           if (mergeOption.indexOf("2 channels") != -1) { 
    186             if (imp.getType() == ImagePlus.GRAY8) { 
    187               newImp = makeRGB(newImp, stack, 2); 
     204 
     205        try { 
     206          if (mergeOption != null) { 
     207            int ndx = mergeOption.indexOf("channels"); 
     208            if (ndx != -1) { 
     209              int n = Integer.parseInt(mergeOption.substring(ndx - 2, ndx - 1)); 
     210              if (imp.getType() == ImagePlus.GRAY8 && n < 4) { 
     211                newImp = makeRGB(newImp, stack, n); 
     212              } 
     213              else { 
     214                imp.setDimensions(n, imp.getNSlices()*num[n - 2], 
     215                  imp.getNFrames()); 
     216                r.setVar("imp", imp); 
     217                r.exec("mode = CompositeImage.COMPOSITE"); 
     218                r.exec("newImp = new CompositeImage(imp, mode)"); 
     219                newImp = (ImagePlus) r.getVar("newImp"); 
     220              } 
    188221            } 
    189             else { 
    190               newImp = new CustomImage(imp, stackOrder, nSlices, 
    191                 nTimes * planes1, 2, true); 
    192             } 
    193           } 
    194           else if (mergeOption.indexOf("3 channels") != -1) { 
    195             if (imp.getType() == ImagePlus.GRAY8) { 
    196               newImp = makeRGB(newImp, stack, 3); 
    197             } 
    198             else { 
    199               newImp = new CustomImage(imp, stackOrder, nSlices, 
    200                 nTimes * planes2, 3, true); 
    201             } 
    202           } 
    203           else if (mergeOption.indexOf("4 channels") != -1) { 
    204             newImp = new CustomImage(imp, stackOrder, nSlices, 
    205               nTimes * planes3, 4, true); 
    206           } 
     222          } 
     223        } 
     224        catch (ReflectException e) { 
     225          ByteArrayOutputStream s = new ByteArrayOutputStream(); 
     226          e.printStackTrace(new PrintStream(s)); 
     227          IJ.error(s.toString()); 
    207228        } 
    208229      } 
     
    210231 
    211232    newImp.setTitle(imp.getTitle()); 
    212     if (newImp instanceof CustomImage) { 
    213       newImp.setDimensions(nChannels, nSlices, nTimes); 
    214     } 
    215     else { 
     233    if (!newImp.getClass().equals(c)) { 
    216234      newImp.setDimensions(newImp.getStackSize() / (nSlices * nTimes), 
    217235        nSlices, nTimes); 
  • trunk/loci/plugins/Exporter.java

    r3453 r3459  
    155155      // convert and save slices 
    156156 
    157       boolean fakeRGB = 
    158         imp instanceof CustomImage || imp instanceof CompositeImage; 
     157      Class c = null; 
     158      try { 
     159        c = Class.forName("ij.CompositeImage"); 
     160      } 
     161      catch (ClassNotFoundException e) { 
     162        IJ.error("Please upgrade to ImageJ 1.39l or later."); 
     163      } 
     164      boolean fakeRGB = imp.getClass().equals(c); 
    159165      int n = fakeRGB ? imp.getNChannels() : 1; 
    160166 
  • trunk/loci/plugins/ImporterOptions.java

    r3448 r3459  
    447447  } 
    448448 
    449   public int promptMergeOption(int one, int two, int three) { 
     449  public int promptMergeOption(int[] nums) { 
    450450    if (windowless) return STATUS_OK; 
    451451    GenericDialog gd = new GenericDialog("Merging Options..."); 
    452452 
    453     String[] options = new String[] {one + " planes, 2 channels per plane", 
    454       two + " planes, 3 channels per plane", 
    455       three + " planes, 4 channels per plane", MERGE_DEFAULT}; 
     453    String[] options = new String[7]; 
     454    options[6] = MERGE_DEFAULT; 
     455    for (int i=0; i<6; i++) { 
     456      options[i] = nums[i] + " planes, " + (i + 2) + " channels per plane"; 
     457    } 
    456458 
    457459    gd.addMessage("How would you like to merge this data?"); 
  • trunk/loci/plugins/OMEPlugin.java

    r3431 r3459  
    2929import ij.gui.GenericDialog; 
    3030import ij.plugin.PlugIn; 
    31 import ij.process.ImageProcessor; 
    3231import java.awt.TextField; 
    3332import java.util.*; 
  • trunk/loci/plugins/Slicer.java

    r3416 r3459  
    3131import ij.plugin.filter.PlugInFilter; 
    3232import ij.process.ImageProcessor; 
    33 import loci.formats.FormatTools; 
     33import java.io.ByteArrayOutputStream; 
     34import java.io.PrintStream; 
     35import loci.formats.*; 
    3436 
    3537public class Slicer implements PlugInFilter { 
     
    9698    Calibration calibration = imp.getCalibration(); 
    9799 
    98     if (imp instanceof CompositeImage) return; 
     100    Class c = null; 
     101    try { 
     102      c = Class.forName("ij.CompositeImage"); 
     103    } 
     104    catch (ClassNotFoundException e) { 
     105      IJ.error("Please upgrade to ImageJ 1.39l or later."); 
     106    } 
     107    if (imp.getClass().equals(c)) return; 
    99108 
    100109    int sizeZ = imp.getNSlices(); 
     
    144153        sliceT ? 1 : sizeT); 
    145154      p.setCalibration(calibration); 
    146       if (imp instanceof CustomImage && !sliceC) { 
    147         CustomImage c = new CustomImage(p, stackOrder, sliceZ ? 1 : sizeZ, 
    148           sliceT ? 1 : sizeT, sliceC ? 1 : sizeC, true); 
    149         c.show(); 
     155      if (imp.getClass().equals(c) && !sliceC) { 
     156        try { 
     157          ReflectedUniverse r = new ReflectedUniverse(); 
     158          r.exec("import ij.CompositeImage"); 
     159          r.setVar("p", p); 
     160          r.exec("c = new CompositeImage(p, CompositeImage.COMPOSITE)"); 
     161          r.exec("c.show()"); 
     162        } 
     163        catch (ReflectException e) { 
     164          ByteArrayOutputStream s = new ByteArrayOutputStream(); 
     165          e.printStackTrace(new PrintStream(s)); 
     166          IJ.error(s.toString()); 
     167        } 
    150168      } 
    151169      else p.show(); 
  • trunk/loci/plugins/Util.java

    r3362 r3459  
    266266        tmpStack.addSlice("", p[i]); 
    267267      } 
    268       imp = new CustomImage(new ImagePlus("", tmpStack), "XYCZT", 1, 1, 
    269         p.length, true); 
     268      imp = new CompositeImage(new ImagePlus("", tmpStack), 
     269        CompositeImage.COMPOSITE); 
    270270    } 
    271271 
Note: See TracChangeset for help on using the changeset viewer.