Changeset 1416


Ignore:
Timestamp:
09/06/06 09:59:07 (14 years ago)
Author:
curtis
Message:

Add Z, T and C sliders to image viewer, for interactive
testing of getIndex and getZCTCoords methods.

Location:
trunk/loci/formats
Files:
2 edited

Legend:

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

    r1402 r1416  
    442442    return testRead(this, args); 
    443443  } 
     444 
     445  // -- FormatHandler API methods -- 
     446 
     447  /** Creates JFileChooser file filters for this file format. */ 
     448  protected void createFilters() { 
     449    filters = new FileFilter[] {new FormatFileFilter(this)}; 
     450  } 
     451 
     452  // -- Utility methods -- 
     453 
    444454  /** 
    445455   * A utility method for test reading a file from the command line, 
     
    617627      // display pixels in image viewer 
    618628      ImageViewer viewer = new ImageViewer(); 
    619       viewer.setImages(id, reader.getFormat(), images); 
     629      viewer.setImages(id, reader, images); 
    620630      viewer.setVisible(true); 
    621631    } 
     
    651661  } 
    652662 
    653   // -- FormatHandler API methods -- 
    654  
    655   /** Creates JFileChooser file filters for this file format. */ 
    656   protected void createFilters() { 
    657     filters = new FileFilter[] {new FormatFileFilter(this)}; 
    658   } 
    659  
    660663} 
  • trunk/loci/formats/ImageViewer.java

    r1267 r1416  
    5252    ImageTools.getDefaultConfiguration(); 
    5353 
    54  
    5554  // -- Fields -- 
    5655 
     
    5857  protected ImageIcon icon; 
    5958  protected JLabel iconLabel; 
    60   protected JSlider slider; 
     59  protected JPanel sliderPanel; 
     60  protected JSlider nSlider, zSlider, tSlider, cSlider; 
    6161  protected JLabel probeLabel; 
    6262  protected JMenuItem fileSave; 
    6363 
    64   protected ImageReader reader; 
    65   protected ImageWriter writer; 
    66  
     64  protected ImageReader myReader; 
     65  protected ImageWriter myWriter; 
     66 
     67  protected String filename; 
     68  protected IFormatReader in; 
    6769  protected BufferedImage[] images; 
    68  
     70  protected int sizeZ, sizeT, sizeC; 
    6971 
    7072  // -- Constructor -- 
     
    7981    setSize(350, 350); // default size 
    8082 
    81     // navigation slider 
    82     slider = new JSlider(1, 1); 
    83     slider.setVisible(false); 
    84     slider.setBorder(new EmptyBorder(5, 3, 5, 3)); 
    85     pane.add(BorderLayout.SOUTH, slider); 
    86     slider.addChangeListener(this); 
     83    // navigation sliders 
     84    sliderPanel = new JPanel(); 
     85    sliderPanel.setVisible(false); 
     86    sliderPanel.setBorder(new EmptyBorder(5, 3, 5, 3)); 
     87    sliderPanel.setLayout(new BoxLayout(sliderPanel, BoxLayout.Y_AXIS)); 
     88    pane.add(BorderLayout.SOUTH, sliderPanel); 
     89 
     90    JPanel nPanel = new JPanel(); 
     91    nPanel.setLayout(new BoxLayout(nPanel, BoxLayout.X_AXIS)); 
     92    sliderPanel.add(nPanel); 
     93    sliderPanel.add(Box.createVerticalStrut(2)); 
     94 
     95    nSlider = new JSlider(1, 1); 
     96    nSlider.setEnabled(false); 
     97    nSlider.addChangeListener(this); 
     98    nPanel.add(new JLabel("N")); 
     99    nPanel.add(Box.createHorizontalStrut(3)); 
     100    nPanel.add(nSlider); 
     101 
     102    JPanel ztcPanel = new JPanel(); 
     103    ztcPanel.setLayout(new BoxLayout(ztcPanel, BoxLayout.X_AXIS)); 
     104    sliderPanel.add(ztcPanel); 
     105 
     106    zSlider = new JSlider(1, 1); 
     107    Dimension dim = zSlider.getPreferredSize(); 
     108    dim.width = 50; 
     109    zSlider.setPreferredSize(dim); 
     110    zSlider.setEnabled(false); 
     111    zSlider.addChangeListener(this); 
     112    ztcPanel.add(new JLabel("Z")); 
     113    ztcPanel.add(Box.createHorizontalStrut(3)); 
     114    ztcPanel.add(zSlider); 
     115    ztcPanel.add(Box.createHorizontalStrut(7)); 
     116 
     117    tSlider = new JSlider(1, 1); 
     118    tSlider.setPreferredSize(dim); 
     119    tSlider.setEnabled(false); 
     120    tSlider.addChangeListener(this); 
     121    ztcPanel.add(new JLabel("T")); 
     122    ztcPanel.add(Box.createHorizontalStrut(3)); 
     123    ztcPanel.add(tSlider); 
     124    ztcPanel.add(Box.createHorizontalStrut(7)); 
     125 
     126    cSlider = new JSlider(1, 1); 
     127    cSlider.setPreferredSize(dim); 
     128    cSlider.setEnabled(false); 
     129    cSlider.addChangeListener(this); 
     130    ztcPanel.add(new JLabel("C")); 
     131    ztcPanel.add(Box.createHorizontalStrut(3)); 
     132    ztcPanel.add(cSlider); 
     133    ztcPanel.add(Box.createHorizontalStrut(7)); 
    87134 
    88135    // image icon 
     
    126173 
    127174    // image I/O engine 
    128     reader = new ImageReader(); 
    129     writer = new ImageWriter(); 
     175    myReader = new ImageReader(); 
     176    myWriter = new ImageWriter(); 
    130177  } 
    131178 
     
    133180  public void open(String id) { 
    134181    wait(true); 
    135     String format = null; 
    136182    try { 
    137183      File f = new File(id); 
    138184      id = f.getAbsolutePath(); 
    139185 
    140       format = reader.getFormat(id); 
    141       //images = reader.open(id); 
    142       IFormatReader r = reader.getReader(id); 
     186      //images = myReader.open(id); 
     187      IFormatReader r = myReader.getReader(id); 
    143188      FileStitcher fs = new FileStitcher(r); 
    144189      ChannelMerger cm = new ChannelMerger(fs); 
     
    146191      int num = cm.getImageCount(id); 
    147192      ProgressMonitor progress = new ProgressMonitor(this, 
    148         "Reading " + id, null, 0, num); 
     193        "Reading " + id, null, 0, num + 1); 
     194      sizeZ = cm.getSizeZ(id); 
     195      sizeT = cm.getSizeT(id); 
     196      sizeC = cm.getSizeC(id); 
     197      progress.setProgress(1); 
    149198      BufferedImage[] img = new BufferedImage[num]; 
    150199      for (int i=0; i<num; i++) { 
    151200        if (progress.isCanceled()) break; 
    152         progress.setProgress(i); 
    153201        img[i] = cm.openImage(id, i); 
    154         if (i == 0) setImages(id, format, img); 
    155       } 
    156       reader.close(); 
    157       progress.setProgress(num); 
     202        if (i == 0) setImages(id, cm, img); 
     203        progress.setProgress(i + 2); 
     204      } 
     205      myReader.close(); 
    158206    } 
    159207    catch (Exception exc) { 
     
    170218    wait(true); 
    171219    try { 
    172       //writer.save(id, images); 
    173       boolean stack = writer.canDoStacks(id); 
     220      //myWriter.save(id, images); 
     221      boolean stack = myWriter.canDoStacks(id); 
    174222      ProgressMonitor progress = new ProgressMonitor(this, 
    175223        "Saving " + id, null, 0, stack ? images.length : 1); 
     
    179227          progress.setProgress(i); 
    180228          boolean canceled = progress.isCanceled(); 
    181           writer.save(id, images[i], i == images.length - 1 || canceled); 
     229          myWriter.save(id, images[i], i == images.length - 1 || canceled); 
    182230          if (canceled) break; 
    183231        } 
     
    186234      else { 
    187235        // save current image only 
    188         writer.save(id, getImage(), true); 
     236        myWriter.save(id, getImage(), true); 
    189237        progress.setProgress(1); 
    190238      } 
     
    195243 
    196244  /** Sets the viewer to display the given images. */ 
    197   public void setImages(String id, String format, BufferedImage[] images) { 
     245  public void setImages(String id, 
     246    IFormatReader reader, BufferedImage[] images) 
     247  { 
     248    filename = id; 
     249    in = reader; 
    198250    this.images = images; 
     251 
     252    try { 
     253      sizeZ = reader.getSizeZ(id); 
     254      sizeT = reader.getSizeT(id); 
     255      sizeC = reader.getSizeC(id); 
     256    } 
     257    catch (Exception exc) { exc.printStackTrace(); } 
     258 
    199259    fileSave.setEnabled(true); 
    200     slider.removeChangeListener(this); 
    201     slider.setValue(1); 
    202     slider.setMaximum(images.length); 
    203     slider.setVisible(images.length > 1); 
    204     slider.addChangeListener(this); 
     260    nSlider.removeChangeListener(this); 
     261    zSlider.removeChangeListener(this); 
     262    tSlider.removeChangeListener(this); 
     263    cSlider.removeChangeListener(this); 
     264    nSlider.setValue(1); 
     265    nSlider.setMaximum(images.length); 
     266    nSlider.setEnabled(images.length > 1); 
     267    zSlider.setValue(1); 
     268    zSlider.setMaximum(sizeZ); 
     269    zSlider.setEnabled(sizeZ > 1); 
     270    tSlider.setValue(1); 
     271    tSlider.setMaximum(sizeT); 
     272    tSlider.setEnabled(sizeT > 1); 
     273    cSlider.setValue(1); 
     274    cSlider.setMaximum(sizeC); 
     275    cSlider.setEnabled(sizeC > 1); 
     276    nSlider.addChangeListener(this); 
     277    zSlider.addChangeListener(this); 
     278    tSlider.addChangeListener(this); 
     279    cSlider.addChangeListener(this); 
     280    sliderPanel.setVisible(images.length > 1); 
     281 
    205282    updateLabel(-1, -1); 
    206283    sb.setLength(0); 
     
    209286      sb.append(" "); 
    210287    } 
     288    String format = reader.getFormat(); 
    211289    if (format != null) { 
    212290      sb.append("("); 
     
    229307 
    230308  /** Gets the index of the currently displayed image. */ 
    231   public int getImageIndex() { 
    232     return slider == null ? 0 : (slider.getValue() - 1); 
    233   } 
    234  
     309  public int getImageIndex() { return nSlider.getValue() - 1; } 
     310 
     311  /** Gets the Z value of the currently displayed image. */ 
     312  public int getZ() { return zSlider.getValue() - 1; } 
     313 
     314  /** Gets the T value of the currently displayed image. */ 
     315  public int getT() { return tSlider.getValue() - 1; } 
     316 
     317  /** Gets the C value of the currently displayed image. */ 
     318  public int getC() { return cSlider.getValue() - 1; } 
    235319 
    236320  // -- ActionListener API methods -- 
     
    241325    if ("open".equals(cmd)) { 
    242326      wait(true); 
    243       JFileChooser chooser = reader.getFileChooser(); 
     327      JFileChooser chooser = myReader.getFileChooser(); 
    244328      wait(false); 
    245329      int rval = chooser.showOpenDialog(this); 
     
    255339    else if ("save".equals(cmd)) { 
    256340      wait(true); 
    257       JFileChooser chooser = writer.getFileChooser(); 
     341      JFileChooser chooser = myWriter.getFileChooser(); 
    258342      wait(false); 
    259343      int rval = chooser.showSaveDialog(this); 
     
    281365  } 
    282366 
    283  
    284367  // -- ChangeListener API methods -- 
    285368 
    286369  /** Handles slider events. */ 
    287370  public void stateChanged(ChangeEvent e) { 
     371    Object src = e.getSource(); 
     372    if (src == nSlider) { 
     373      // update Z, T and C sliders 
     374      int ndx = getImageIndex(); 
     375      int[] zct = {-1, -1, -1}; 
     376      try { zct = in.getZCTCoords(filename, ndx); } 
     377      catch (Exception exc) { exc.printStackTrace(); } 
     378      if (zct[0] >= 0) { 
     379        zSlider.removeChangeListener(this); 
     380        zSlider.setValue(zct[0] + 1); 
     381        zSlider.addChangeListener(this); 
     382      } 
     383      if (zct[1] >= 0) { 
     384        cSlider.removeChangeListener(this); 
     385        cSlider.setValue(zct[1] + 1); 
     386        cSlider.addChangeListener(this); 
     387      } 
     388      if (zct[2] >= 0) { 
     389        tSlider.removeChangeListener(this); 
     390        tSlider.setValue(zct[2] + 1); 
     391        tSlider.addChangeListener(this); 
     392      } 
     393    } 
     394    else { 
     395      // update N slider 
     396      int ndx = -1; 
     397      try { ndx = in.getIndex(filename, getZ(), getC(), getT()); } 
     398      catch (Exception exc) { exc.printStackTrace(); } 
     399      if (ndx >= 0) { 
     400        nSlider.removeChangeListener(this); 
     401        nSlider.setValue(ndx); 
     402        nSlider.addChangeListener(this); 
     403      } 
     404    } 
    288405    updateLabel(-1, -1); 
    289406    BufferedImage image = getImage(); 
     
    292409  } 
    293410 
    294  
    295411  // -- MouseMotionListener API methods -- 
    296412 
     
    300416  /** Handles cursor probes. */ 
    301417  public void mouseMoved(MouseEvent e) { updateLabel(e.getX(), e.getY()); } 
    302  
    303418 
    304419  // -- Helper methods -- 
     
    317432      sb.append(images.length); 
    318433    } 
     434    if (sizeZ > 1) { 
     435      sb.append("; Z="); 
     436      sb.append(getZ() + 1); 
     437      sb.append("/"); 
     438      sb.append(sizeZ); 
     439    } 
     440    if (sizeT > 1) { 
     441      sb.append("; T="); 
     442      sb.append(getT() + 1); 
     443      sb.append("/"); 
     444      sb.append(sizeT); 
     445    } 
     446    if (sizeC > 1) { 
     447      sb.append("; C="); 
     448      sb.append(getC() + 1); 
     449      sb.append("/"); 
     450      sb.append(sizeC); 
     451    } 
    319452    BufferedImage image = images[ndx]; 
    320453    int w = image == null ? -1 : image.getWidth(); 
     
    326459      sb.append("X="); 
    327460      sb.append(x); 
     461      if (w > 0) { 
     462        sb.append("/"); 
     463        sb.append(w); 
     464      } 
    328465      sb.append("; Y="); 
    329466      sb.append(y); 
     467      if (h > 0) { 
     468        sb.append("/"); 
     469        sb.append(h); 
     470      } 
    330471      if (image != null) { 
    331         sb.append(" ("); 
    332         sb.append(image.getWidth()); 
    333         sb.append(" x "); 
    334         sb.append(image.getHeight()); 
    335         sb.append(")"); 
    336472        Raster r = image.getRaster(); 
    337473        double[] pix = r.getPixel(x, y, (double[]) null); 
     
    354490  } 
    355491 
    356  
    357492  // -- Main method -- 
    358493 
Note: See TracChangeset for help on using the changeset viewer.