Changeset 4796


Ignore:
Timestamp:
02/10/09 12:29:31 (11 years ago)
Author:
melissa
Message:

Fixed Colorizer plugin to work with datasets that have one lookup table per channel.

Location:
trunk/components/loci-plugins/src/loci/plugins
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/components/loci-plugins/src/loci/plugins/Colorizer.java

    r4744 r4796  
    8181  private boolean color; 
    8282  private boolean hyperstack; 
    83   private byte[][] lut; 
     83  private byte[][][] lut; 
    8484  private String mergeOption; 
    8585 
     
    118118      hyperstack = gd.getNextBoolean(); 
    119119 
    120       if (color) doPrompt = true; 
     120      if (color && lut == null) doPrompt = true; 
    121121    } 
    122122    else { 
     
    129129      if (color) { 
    130130        if (colorNdx >= 0 && colorNdx < 3) { 
    131           lut = new byte[3][256]; 
    132           for (int q=0; q<lut[colorNdx].length; q++) { 
    133             lut[colorNdx][q] = (byte) q; 
    134           } 
    135         } 
    136         else doPrompt = true; 
     131          lut = new byte[imp.getNChannels()][3][256]; 
     132          for (int channel=0; channel<lut.length; channel++) { 
     133            if (colorNdx + channel >= lut[channel].length) break; 
     134            for (int q=0; q<lut[channel][colorNdx + channel].length; q++) { 
     135              lut[channel][colorNdx + channel][q] = (byte) q; 
     136            } 
     137          } 
     138        } 
     139        else if (lut == null) doPrompt = true; 
    137140      } 
    138141      mergeOption = Macro.getValue(arg, "merge_option", null); 
     
    183186            if (doPrompt) { 
    184187              promptForColor(i); 
    185               LUT channelLut = new LUT(lut[0], lut[1], lut[2]); 
     188            } 
     189            if (lut != null) { 
     190              LUT channelLut = new LUT(lut[i][0], lut[i][1], lut[i][2]); 
    186191              r.setVar("lut", channelLut); 
    187192              r.exec("composite.setChannelLut(lut)"); 
     
    208213        } 
    209214 
    210         IndexColorModel model = new IndexColorModel(8, 256, lut[0], lut[1], 
    211           lut[2]); 
     215        IndexColorModel model = new IndexColorModel(8, 256, lut[0][0], 
     216          lut[0][1], lut[0][2]); 
    212217        newStack.setColorModel(model); 
    213218        newImp.setStack(imp.getTitle(), newStack); 
     
    343348    } 
    344349    if (closeOriginal) imp.close(); 
     350    lut = null; 
     351  } 
     352 
     353  // -- Colorizer API methods -- 
     354 
     355  public void setLookupTable(byte[][] lut, int channel) { 
     356    if (this.lut == null) { 
     357      this.lut = new byte[imp.getNChannels()][][]; 
     358    } 
     359    if (channel < this.lut.length) this.lut[channel] = lut; 
    345360  } 
    346361 
     
    384399    double blueIncrement = ((double) color.getBlue()) / 255; 
    385400 
    386     lut = new byte[3][256]; 
     401    if (lut == null) lut = new byte[imp.getNChannels()][3][256]; 
    387402    for (int i=0; i<256; i++) { 
    388       lut[0][i] = (byte) (i * redIncrement); 
    389       lut[1][i] = (byte) (i * greenIncrement); 
    390       lut[2][i] = (byte) (i * blueIncrement); 
     403      lut[channel][0][i] = (byte) (i * redIncrement); 
     404      lut[channel][1][i] = (byte) (i * greenIncrement); 
     405      lut[channel][2][i] = (byte) (i * blueIncrement); 
    391406    } 
    392407  } 
  • trunk/components/loci-plugins/src/loci/plugins/Importer.java

    r4730 r4796  
    2828import ij.*; 
    2929import ij.io.FileInfo; 
     30import ij.plugin.filter.PlugInFilterRunner; 
    3031import ij.process.*; 
    3132import java.awt.Rectangle; 
     33import java.awt.image.IndexColorModel; 
    3234import java.io.*; 
    3335import java.util.*; 
     
    6062  private Vector imps = new Vector(); 
    6163  private String stackOrder = null; 
     64 
     65  private IndexColorModel[] colorModels; 
    6266 
    6367  // -- Constructor -- 
     
    534538        } 
    535539        else { 
     540          if (r.isIndexed()) colorModels = new IndexColorModel[r.getSizeC()]; 
     541 
    536542          for (int j=0; j<num[i]; j++) { 
    537543            if (!load[j]) continue; 
     
    548554 
    549555            int ndx = j; 
    550             //int ndx = FormatTools.getReorderedIndex(r, stackOrder, j); 
    551556 
    552557            String label = constructSliceLabel(ndx, r, 
     
    558563              plugin.canceled = true; 
    559564              return; 
     565            } 
     566 
     567            int channel = r.getZCTCoords(ndx)[1]; 
     568            if (colorModels != null) { 
     569              colorModels[channel] = (IndexColorModel) ip.getColorModel(); 
    560570            } 
    561571 
     
    855865            " hyper_stack=" + options.isViewHyperstack() + " "); 
    856866        } 
     867        else if (colorModels != null && !options.isVirtual()) { 
     868          Colorizer colorizer = new Colorizer(); 
     869          String arg = "stack_order=" + stackOrder + " merge=false " + 
     870            "colorize=true hyper_stack=" + options.isViewHyperstack() + " "; 
     871          colorizer.setup(arg, imp); 
     872          for (int channel=0; channel<colorModels.length; channel++) { 
     873            byte[][] lut = new byte[3][256]; 
     874            colorModels[channel].getReds(lut[0]); 
     875            colorModels[channel].getGreens(lut[1]); 
     876            colorModels[channel].getBlues(lut[2]); 
     877            colorizer.setLookupTable(lut, channel); 
     878          } 
     879          new PlugInFilterRunner(colorizer, "", arg); 
     880        } 
    857881      } 
    858882      else imps.add(imp); 
  • trunk/components/loci-plugins/src/loci/plugins/Util.java

    r4735 r4796  
    181181 
    182182        ip[i] = new ByteProcessor(w, h, q, null); 
    183         //if (cm != null) ip[i].setColorModel(cm); 
     183        if (cm != null) ip[i].setColorModel(cm); 
    184184      } 
    185185      else if (pixels instanceof short[]) { 
Note: See TracChangeset for help on using the changeset viewer.