Changeset 7189


Ignore:
Timestamp:
11/12/10 21:02:36 (9 years ago)
Author:
aivar
Message:

Dynamically sets minimum, as well as maximum. TIdied up code & added comments.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/maven/projects/slim-plugin/src/main/java/loci/slim/colorizer/DataColorizer.java

    r7134 r7189  
    4242 
    4343/** 
    44  * TODO 
    45  * 
    46  * <dl><dt><b>Source code:</b></dt> 
    47  * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/projects/slim-plugin/src/main/java/loci/colorizer/DataColorizer.java">Trac</a>, 
    48  * <a href="http://dev.loci.wisc.edu/svn/java/trunk/projects/slim-plugin/src/main/java/loci/colorizer/DataColorizer.java">SVN</a></dd></dl> 
     44 * Displays a colorized lifetime image and a UI that shows the lifetime histogram 
     45 * and controls the colorization. 
    4946 * 
    5047 * @author Aivar Grislis grislis at wisc.edu 
     
    5754    double m_start; 
    5855    double m_stop; 
     56    double m_min; 
    5957    double m_max; 
     58    double m_workMin; 
    6059    double m_workMax; 
    6160    ImagePlus m_imagePlus; 
     
    6766    DataColorizerUI m_ui; 
    6867 
     68    /** 
     69     * Constructor, creates a new imagePlus. 
     70     * 
     71     * @param width 
     72     * @param height 
     73     * @param title 
     74     */ 
    6975    public DataColorizer(int width, int height, String title) { 
    7076        m_width = width; 
     
    7581    } 
    7682 
     83    /** 
     84     * Constructor, uses an existing imagePlus. 
     85     * 
     86     * @param imagePlus 
     87     */ 
    7788    public DataColorizer(ImagePlus imagePlus) { 
    7889        m_imagePlus = imagePlus; 
     
    8394    } 
    8495 
     96    /** 
     97     * Common initialization. 
     98     * 
     99     */ 
    85100    private void init() { 
    86101        m_imagePlus.show(); 
     
    90105         
    91106        m_auto = true; 
    92         m_start = m_stop = m_max = 0.0; 
    93         m_workMax = 0.0;  
     107        m_start = m_min = m_workMin = Double.MAX_VALUE; 
     108        m_stop = m_max = m_workMax = 0.0; 
    94109  
    95110        m_colorize = new FiveColorColorize(Color.BLUE, Color.CYAN, Color.GREEN, Color.YELLOW, Color.RED); //ThreeColorColorize(Color.GREEN, Color.YELLOW, Color.RED); 
     
    108123    public void setData(boolean firstTime, int x, int y, double datum) { 
    109124        synchronized (m_synchObject) { 
     125            // we only want to count data once per actual, final pixel 
    110126            if (firstTime) { 
     127                dumpInfo("before", datum); 
    111128                // add to histogram 
    112129                m_histogramData[m_histogramDataIndex++] = datum; 
     130 
     131                // keep track of minimum 
     132                if (datum < m_workMin) { 
     133                    m_workMin = datum; 
     134                } 
    113135 
    114136                // keep track of maximum 
     
    116138                    m_workMax = datum; 
    117139                } 
    118             } 
    119  
    120             // save value for possible recolorization 
     140                dumpInfo("after", datum); 
     141            } 
     142 
     143            // save value for possible recolorization as color map changes 
    121144            m_imageData[x][y] = datum; 
    122145 
    123             // are we past the initial update cycle? 
     146            // are we live?  (past the initial update cycle) 
    124147            if (m_max > 0.0) { 
    125148                // show colorized pixel 
     
    130153    } 
    131154 
    132     /** 
    133      * During the fit, ets the data for a given x, y and updates 
    134      * the colorized version also. 
    135      * 
    136      * @param x 
    137      * @param y 
    138      * @param value 
    139      */ 
    140     public void setData(int x, int y, double value) { 
    141         setData(true, x, y, value); 
     155    private void dumpInfo(String title, double datum) { 
     156        System.out.println(title + " " + datum + " wMin " + m_workMin + " wMax " + m_workMax); 
    142157    } 
    143158 
     
    149164    public void update() { 
    150165        synchronized (m_synchObject) { 
    151             // did the maximum grow? 
    152             if (m_workMax > m_max) { 
    153  
    154                 // first update or on automatic 
     166            // did minimum or maximum change? 
     167            if (m_workMin < m_min || m_workMax > m_max) { 
     168                dumpInfo2("BEFORE "); 
     169                // first update or on automatic? 
    155170                if (0.0 == m_max || m_auto) { 
     171                    m_min = m_workMin; 
    156172                    m_max = m_workMax; 
    157                      
     173 
    158174                    // handle automatic colorization 
    159175                    if (m_auto) { 
    160                         m_stop = m_max; 
     176                        m_start = m_min; 
     177                        m_stop  = m_max; 
    161178                    } 
    162                     // recolorize, based on new maximum, colors have shifted 
     179 
     180                    // recolorize, based on new min and max, colors have shifted 
    163181                    recolorize(); 
    164182                } 
    165183                else { 
     184                    m_min = m_workMin; 
    166185                    m_max = m_workMax; 
    167186                } 
    168  
    169                 //TODO ARG enable this code to show the progression of drawing 
    170                 // with each update call. 
    171                 //m_imageProcessor = new ColorProcessor(m_width, m_height); 
    172                 //m_imagePlus = new ImagePlus("...", m_imageProcessor); 
    173  
    174             } 
    175             m_ui.updateData(m_histogramData, m_max); 
     187                dumpInfo2("AFTER"); 
     188            } 
     189            m_ui.updateData(m_histogramData, m_min, m_max); 
    176190            m_imagePlus.draw(); 
    177191        } 
    178192    } 
    179193 
    180     public void setRange(boolean auto, double start, double stop, double max) { 
     194    private void dumpInfo2(String title) { 
     195        System.out.println(title + " m_min " + m_min + " m_max " + m_max); 
     196    } 
     197    /** 
     198     * Listens for external changes to the range settings. 
     199     * 
     200     * @param auto 
     201     * @param start 
     202     * @param stop 
     203     * @param min 
     204     * @param max 
     205     */ 
     206    public void setRange(boolean auto, double start, double stop, double min, double max) { 
    181207        boolean redo = false; 
    182208        if (auto != m_auto) { 
     
    201227    } 
    202228 
     229    /** 
     230     * Called when a fit is cancelled. 
     231     */ 
    203232    public void quit() { 
    204233        m_imagePlus.close(); 
     
    206235    } 
    207236 
     237    /** 
     238     * Redraws the entire colorized image. 
     239     */ 
    208240    private void recolorize() { 
    209241        for (int y = 0; y < m_height; ++y) { 
     
    217249    } 
    218250 
     251    /** 
     252     * Colorizes, converts a lifetime to a color. 
     253     * 
     254     * @param datum 
     255     * @return color 
     256     */ 
    219257    private Color lookUpColor(double datum) { 
    220258        return m_colorize.colorize(m_start, m_stop, datum); 
Note: See TracChangeset for help on using the changeset viewer.