package edu.mbl.jif.gui.imaging; import javax.media.jai.*; import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.image.*; import java.awt.image.renderable.*; import java.util.*; public class ThresholdControl extends JPanel implements ChangeListener { private PlanarImage source = null; private PlanarImage target = null; private double[] low; private double[] high; private double[] map; private ImageDisplayPanel idp; private int highest = 255; public ThresholdControl(ImageDisplayPanel _idp) { idp = _idp; // contains the image. low = new double[1]; high = new double[1]; map = new double[1]; low[0] = 0.0F; high[0] = 0.0F; map[0] = 0.0F; JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, highest, 0); Hashtable labels = new Hashtable(); labels.put(new Integer(0), new JLabel("0")); labels.put(new Integer(255), new JLabel("255")); slider.setLabelTable(labels); slider.setPaintLabels(true); slider.addChangeListener(this); slider.setEnabled(true); slider.setOpaque(false); slider.setFont(new java.awt.Font("Dialog", 0, 10)); //JPanel borderedPane = new JPanel(); //setLayout(new BorderLayout()); //setBorder(BorderFactory.createTitledBorder("Threshold")); add(slider, BorderLayout.NORTH); //add(borderedPane, BorderLayout.SOUTH); } // called by the ImageDisplayPanel component to update the current image public void setCurrentImage(BufferedImage image) { ParameterBlock pb = new ParameterBlock(); pb.add(image); source = (PlanarImage)JAI.create("awtImage", pb); } public final void stateChanged(ChangeEvent e) { JSlider slider = (JSlider) e.getSource(); high[0] = (double) slider.getValue(); ParameterBlock pb = new ParameterBlock(); pb.addSource(source); pb.add(low); pb.add(high); pb.add(map); target = JAI.create("threshold", pb, null); idp.changeImage(target.getAsBufferedImage()); } }