/** * Notify any DialogListeners of changes having occurred If a listener returns false, do not call * further listeners and disable the OK button and preview Checkbox (if it exists). For * PlugInFilters, this ensures that the PlugInFilterRunner, which listens as the last one, is not * called if the PlugInFilter has detected invalid parameters. Thus, unnecessary calling the * run(ip) method of the PlugInFilter for preview is avoided in that case. */ private void notifyListeners(AWTEvent e) { if (dialogListeners == null) return; boolean everythingOk = true; for (int i = 0; everythingOk && i < dialogListeners.size(); i++) try { resetCounters(); if (!((DialogListener) dialogListeners.elementAt(i)).dialogItemChanged(this, e)) everythingOk = false; } // disable further listeners if false (invalid parameters) returned catch (Exception err) { // for exceptions, don't cover the input by a window but IJ.beep(); // show them at in the "Log" IJ.log( "ERROR: " + err + "\nin DialogListener of " + dialogListeners.elementAt(i) + "\nat " + (err.getStackTrace()[0]) + "\nfrom " + (err.getStackTrace()[1])); // requires Java 1.4 } boolean workaroundOSXbug = IJ.isMacOSX() && okay != null && !okay.isEnabled() && everythingOk; if (previewCheckbox != null) previewCheckbox.setEnabled(everythingOk); if (okay != null) okay.setEnabled(everythingOk); if (workaroundOSXbug) repaint(); // OSX 10.4 bug delays update of enabled until the next input }
public synchronized void adjustmentValueChanged(AdjustmentEvent e) { if (!checkImage()) { IJ.beep(); IJ.showStatus("No Image"); return; } if (e.getSource() == minSlider) { adjustMinHue((int) minSlider.getValue()); } else if (e.getSource() == maxSlider) { adjustMaxHue((int) maxSlider.getValue()); } else if (e.getSource() == minSlider2) { adjustMinSat((int) minSlider2.getValue()); } else if (e.getSource() == maxSlider2) { adjustMaxSat((int) maxSlider2.getValue()); } else if (e.getSource() == minSlider3) { adjustMinBri((int) minSlider3.getValue()); } else if (e.getSource() == maxSlider3) { adjustMaxBri((int) maxSlider3.getValue()); } originalB.setEnabled(true); updateLabels(); updatePlot(); notify(); }
public Channels() { super("Channels"); if (instance != null) { instance.toFront(); return; } WindowManager.addWindow(this); instance = this; GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); setLayout(gridbag); int y = 0; c.gridx = 0; c.gridy = y++; c.gridwidth = 1; c.fill = GridBagConstraints.BOTH; c.anchor = GridBagConstraints.CENTER; int margin = 32; if (IJ.isMacOSX()) margin = 20; c.insets = new Insets(10, margin, 10, margin); choice = new Choice(); for (int i = 0; i < modes.length; i++) choice.addItem(modes[i]); choice.select(0); choice.addItemListener(this); add(choice, c); CompositeImage ci = getImage(); int nCheckBoxes = ci != null ? ci.getNChannels() : 3; if (nCheckBoxes > CompositeImage.MAX_CHANNELS) nCheckBoxes = CompositeImage.MAX_CHANNELS; checkbox = new Checkbox[nCheckBoxes]; for (int i = 0; i < nCheckBoxes; i++) { checkbox[i] = new Checkbox("Channel " + (i + 1), true); c.insets = new Insets(0, 25, i < nCheckBoxes - 1 ? 0 : 10, 5); c.gridy = y++; add(checkbox[i], c); checkbox[i].addItemListener(this); } c.insets = new Insets(0, 15, 10, 15); c.fill = GridBagConstraints.NONE; c.gridy = y++; moreButton = new Button(moreLabel); moreButton.addActionListener(this); add(moreButton, c); update(); pm = new PopupMenu(); for (int i = 0; i < menuItems.length; i++) addPopupItem(menuItems[i]); add(pm); addKeyListener(IJ.getInstance()); // ImageJ handles keyboard shortcuts setResizable(false); pack(); if (location == null) { GUI.center(this); location = getLocation(); } else setLocation(location); show(); }
public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if (command == null) return; if (command.equals(moreLabel)) { Point bloc = moreButton.getLocation(); pm.show(this, bloc.x, bloc.y); } else if (command.equals("Convert to RGB")) IJ.doCommand("Stack to RGB"); else IJ.doCommand(command); }
public void paint(Graphics g) { super.paint(g); if (firstPaint) { if (numberField != null && IJ.isMacOSX()) { // work around for bug on Intel Macs that caused 1st field to be un-editable TextField tf = (TextField) (numberField.elementAt(0)); tf.setEditable(false); tf.setEditable(true); } if (numberField == null && stringField == null) okay.requestFocus(); firstPaint = false; } }
// GL public synchronized void itemStateChanged(ItemEvent e) { if (e.getSource() == hsb) isRGB = false; if (e.getSource() == rgb) isRGB = true; if (e.getSource() == hsb || e.getSource() == rgb) { flag = true; originalB.setEnabled(false); filteredB.setEnabled(false); minHue = minSat = minBri = 0; maxHue = maxSat = maxBri = 255; bandPassH.setState(true); bandPassS.setState(true); bandPassB.setState(true); } reset(imp, ip); ip = setup(imp); apply(imp, ip); updateNames(); notify(); }
public void actionPerformed(ActionEvent e) { Button b = (Button) e.getSource(); if (b == null) return; boolean imageThere = checkImage(); if (imageThere) { if (b == originalB) { reset(imp, ip); filteredB.setEnabled(true); } else if (b == filteredB) { apply(imp, ip); } else if (b == sampleB) { reset(imp, ip); sample(); apply(imp, ip); } else if (b == stackB) { applyStack(); } else if (b == helpB) { IJ.showMessage( "Help", "Threshold Colour v1.0\n \n" + "Modification of Bob Dougherty's BandPass2 plugin by G.Landini to\n" + "threshold 24 bit RGB images based on Hue, Saturation and Brightness\n" + "or Red, Green and Blue components.\n \n" + "Pass: Band-pass filter (anything within range is displayed).\n \n" + "Stop: Band-reject filter (anything within range is NOT displayed).\n \n" + "Original: Shows the original image and updates the buffer when\n" + " switching to another image.\n \n" + "Filtered: Shows the filtered image.\n \n" + "Stack: Processes the rest of the slices in the stack (if any)\n" + " using the current settings.\n \n" + "Threshold: Shows the object/background in the foreground and\n" + " background colours selected in the ImageJ toolbar.\n \n" + "Invert: Swaps the fore/background colours.\n \n" + "Sample: (experimental) Sets the ranges of the filters based on the\n" + " pixel value componentd in a rectangular, user-defined, ROI.\n \n" + "HSB RGB: Selects HSB or RGB space and resets all the filters.\n \n" + "Note that the \'thresholded\' image is RGB, not 8 bit grey."); } updatePlot(); updateLabels(); imp.updateAndDraw(); } else { IJ.beep(); IJ.showStatus("No Image"); } notify(); }
public void keyPressed(KeyEvent e) { int keyCode = e.getKeyCode(); IJ.setKeyDown(keyCode); if (keyCode == KeyEvent.VK_ENTER && textArea1 == null && okay != null && okay.isEnabled()) { wasOKed = true; if (IJ.isMacOSX()) accessTextFields(); dispose(); } else if (keyCode == KeyEvent.VK_ESCAPE) { wasCanceled = true; dispose(); IJ.resetEscape(); } else if (keyCode == KeyEvent.VK_W && (e.getModifiers() & Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()) != 0) { wasCanceled = true; dispose(); } }
void init(String[] names1, float[][][] pch1, int psfflag1) { setLayout(null); names = names1; pch = pch1; psfflag = psfflag1; ncurves = pch.length; nparams = 11; xpts = pch[0].length; ypts = pch[0][0].length; checkarray = new Checkbox[ncurves]; include = new boolean[ncurves]; namearray = new TextField[ncurves + 1]; int1array = new TextField[ncurves + 1]; intensity1 = new double[ncurves + 1]; e1array = new TextField[ncurves + 1]; n1array = new TextField[ncurves + 1]; bright1 = new double[ncurves + 1]; number1 = new double[ncurves + 1]; int2array = new TextField[ncurves + 1]; intensity2 = new double[ncurves + 1]; e2array = new TextField[ncurves + 1]; n2array = new TextField[ncurves + 1]; bright2 = new double[ncurves + 1]; number2 = new double[ncurves + 1]; eccarray = new TextField[ncurves + 1]; brightcc = new double[ncurves + 1]; eminccarray = new TextField[ncurves + 1]; brightmincc = new double[ncurves + 1]; c2array = new TextField[ncurves + 1]; c2 = new double[ncurves + 1]; nmeas = new int[ncurves + 1]; avg = new float[xpts][ypts]; indices = new int[ncurves]; beta = 0.05; getintbright(); for (int i = 0; i < ncurves; i++) { include[i] = true; indices[i] = i; } updateavg(); int starty = 60; int startx = 10; int yinc = 25; for (int i = 0; i <= ncurves; i++) { if (i != ncurves) { checkarray[i] = new Checkbox("", include[i]); checkarray[i].setBounds(startx, starty + i * yinc, 20, 20); checkarray[i].addItemListener(this); add(checkarray[i]); } namearray[i] = new TextField(names[i]); namearray[i].setBounds(startx + 30, starty + i * yinc, 200, 20); add(namearray[i]); int1array[i] = new TextField("" + (float) intensity1[i]); int1array[i].setBounds(startx + 30 + 210, starty + i * yinc, 40, 20); add(int1array[i]); e1array[i] = new TextField("" + (float) bright1[i]); e1array[i].setBounds(startx + 30 + 210 + 50, starty + i * yinc, 40, 20); add(e1array[i]); n1array[i] = new TextField("" + (float) number1[i]); n1array[i].setBounds(startx + 30 + 210 + 50 + 50, starty + i * yinc, 40, 20); add(n1array[i]); int2array[i] = new TextField("" + (float) intensity2[i]); int2array[i].setBounds(startx + 30 + 210 + 50 + 50 + 50, starty + i * yinc, 40, 20); add(int2array[i]); e2array[i] = new TextField("" + (float) bright2[i]); e2array[i].setBounds(startx + 30 + 210 + 50 + 50 + 50 + 50, starty + i * yinc, 40, 20); add(e2array[i]); n2array[i] = new TextField("" + (float) number2[i]); n2array[i].setBounds(startx + 30 + 210 + 50 + 50 + 50 + 50 + 50, starty + i * yinc, 40, 20); add(n2array[i]); eccarray[i] = new TextField("" + (float) brightcc[i]); eccarray[i].setBounds( startx + 30 + 210 + 50 + 50 + 50 + 50 + 50 + 50, starty + i * yinc, 40, 20); add(eccarray[i]); eminccarray[i] = new TextField("" + (float) brightmincc[i]); eminccarray[i].setBounds( startx + 30 + 210 + 50 + 50 + 50 + 50 + 50 + 50 + 50, starty + i * yinc, 40, 20); add(eminccarray[i]); c2[i] = 0.0; c2array[i] = new TextField("" + (float) c2[i]); c2array[i].setBounds( startx + 30 + 210 + 50 + 50 + 50 + 50 + 50 + 50 + 50 + 50, starty + i * yinc, 80, 20); add(c2array[i]); } namelabel = new Label("Filename"); namelabel.setBounds(startx + 30, starty - 25, 100, 20); add(namelabel); intlabel = new Label("<Ig>"); intlabel.setBounds(startx + 30 + 210, starty - 25, 40, 20); add(intlabel); brightlabel = new Label("<eg>"); brightlabel.setBounds(startx + 30 + 210 + 50, starty - 25, 40, 20); add(brightlabel); nlabel = new Label("<Ng>"); nlabel.setBounds(startx + 30 + 210 + 50 + 50, starty - 25, 40, 20); add(nlabel); int2label = new Label("<Ir>"); int2label.setBounds(startx + 30 + 210 + 50 + 50 + 50, starty - 25, 40, 20); add(int2label); bright2label = new Label("<er>"); bright2label.setBounds(startx + 30 + 210 + 50 + 50 + 50 + 50, starty - 25, 40, 20); add(bright2label); n2label = new Label("<Nr>"); n2label.setBounds(startx + 30 + 210 + 50 + 50 + 50 + 50 + 50, starty - 25, 40, 20); add(n2label); brightcclabel = new Label("<ecc>"); brightcclabel.setBounds(startx + 30 + 210 + 50 + 50 + 50 + 50 + 50 + 50, starty - 25, 40, 20); add(brightcclabel); brightccminlabel = new Label("min"); brightccminlabel.setBounds( startx + 30 + 210 + 50 + 50 + 50 + 50 + 50 + 50 + 50, starty - 25, 40, 20); add(brightccminlabel); c2label = new Label("chi^2"); c2label.setBounds( startx + 30 + 210 + 50 + 50 + 50 + 50 + 50 + 50 + 50 + 50, starty - 25, 80, 20); add(c2label); int buttonsx = startx + 30 + 210 + 50 + 50 + 50 + 50 + 50 + 50 + 50 + 50 + 90; fitavgbutton = new Button("Fit Avg"); fitavgbutton.setBounds(buttonsx, starty - 25, 100, 40); fitavgbutton.addActionListener(this); add(fitavgbutton); fitglobalbutton = new Button("Fit Global"); fitglobalbutton.setBounds(buttonsx, starty - 25 + 50, 100, 40); fitglobalbutton.addActionListener(this); add(fitglobalbutton); clearparamsbutton = new Button("Reset Fit Params"); clearparamsbutton.setBounds(buttonsx, starty - 25 + 50 + 50, 100, 40); clearparamsbutton.addActionListener(this); add(clearparamsbutton); checkc2 = false; fitclass = new NLLSfit(this, 0.0001, 50, 0.1); globalfitclass = new NLLSglobalfit(this, 0.0001, 50, 0.1); pchfunc = new pch2D((int) ((double) xpts * 1.5), (int) ((double) ypts * 1.5), psfflag); avgfit = new float[xpts][ypts]; fit = new float[ncurves][xpts][ypts]; xvals = new float[ncurves][xpts][ypts]; for (int i = 0; i < ncurves; i++) { for (int j = 0; j < xpts; j++) { for (int k = 0; k < ypts; k++) { xvals[i][j][k] = (float) k; fit[i][j][k] = 1.0f; } } } globalc2label = new Label("Global chi^2 = " + (float) 0.0); globalc2label.setBounds(buttonsx, starty - 25 + 50 + 50 + 50, 140, 20); add(globalc2label); dispcurvelabel = new Label("Display Fit #"); dispcurvelabel.setBounds(buttonsx, starty - 25 + 50 + 50 + 50 + 30, 70, 20); add(dispcurvelabel); dispcurvechoice = new Choice(); for (int i = 0; i < ncurves; i++) { dispcurvechoice.add("" + (i + 1)); } dispcurve = 0; dispcurvechoice.select(0); dispcurvechoice.setBounds(buttonsx + 80, starty - 25 + 50 + 50 + 50 + 30, 40, 20); dispcurvechoice.addItemListener(this); add(dispcurvechoice); betalabel = new Label("Bleedthrough f"); betalabel.setBounds(buttonsx, starty - 25 + 50 + 50 + 50 + 30 + 30, 100, 20); add(betalabel); betaval = new TextField("" + (float) beta); betaval.setBounds(buttonsx + 110, starty - 25 + 50 + 50 + 50 + 30 + 30, 40, 20); betaval.addActionListener(this); add(betaval); beta = Double.parseDouble(betaval.getText()); updatebeta(); undobutton = new Button("Undo Global Fit"); undobutton.setBounds(buttonsx, starty - 25 + 50 + 50 + 50 + 30 + 30 + 50, 100, 40); undobutton.addActionListener(this); add(undobutton); geterrorsbutton = new Button("Get Errors"); geterrorsbutton.setBounds(buttonsx, starty - 25 + 50 + 50 + 50 + 30 + 30 + 50 + 50, 100, 40); geterrorsbutton.addActionListener(this); add(geterrorsbutton); copylabel = new Label("copyright 2009 Jay Unruh ([email protected]) non-profit use only"); copylabel.setBounds(10, 790, 400, 20); add(copylabel); n_b_label = new Label("N and B Analysis"); n_b_label.setBounds(250, 10, 100, 20); add(n_b_label); pwavg = new PlotWindow3D("Avg", "kg", "kr", "Frequency", avg, 0); pwavg.setLogAxes(false, false, true); pwavg.draw(); pwavg.addPoints(avgfit, true, 0); float[] temp = pwavg.getLimits(); temp[4] = 1.0f; pwavg.setLimits(temp); float[][] temppch = new float[xpts][ypts]; for (int i = 0; i < xpts; i++) { System.arraycopy(pch[dispcurve][i], 0, temppch[i], 0, ypts); } pwfit = new PlotWindow3D("Selected Curve", "kg", "kr", "Frequency", temppch, 0); pwfit.setLogAxes(false, false, true); pwfit.draw(); pwfit.addPoints(fit[dispcurve], true, 0); float[] temp2 = pwfit.getLimits(); temp2[4] = 1.0f; pwfit.setLimits(temp2); resetparams(); repaint(); }
/** Displays this dialog box. */ public void showDialog() { if (macro) { dispose(); recorderOn = Recorder.record && Recorder.recordInMacros; } else { if (pfr != null) // prepare preview (not in macro mode): tell the PlugInFilterRunner to listen pfr.setDialog(this); Panel buttons = new Panel(); buttons.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 0)); cancel = new Button(cancelLabel); cancel.addActionListener(this); cancel.addKeyListener(this); if (yesNoCancel) { okLabel = yesLabel; no = new Button(noLabel); no.addActionListener(this); no.addKeyListener(this); } okay = new Button(okLabel); okay.addActionListener(this); okay.addKeyListener(this); boolean addHelp = helpURL != null; if (addHelp) { help = new Button(helpLabel); help.addActionListener(this); help.addKeyListener(this); } if (IJ.isMacintosh()) { if (addHelp) buttons.add(help); if (yesNoCancel) buttons.add(no); if (!hideCancelButton) buttons.add(cancel); buttons.add(okay); } else { buttons.add(okay); if (yesNoCancel) buttons.add(no); ; if (!hideCancelButton) buttons.add(cancel); if (addHelp) buttons.add(help); } c.gridx = 0; c.gridy = y; c.anchor = GridBagConstraints.EAST; c.gridwidth = 2; c.insets = new Insets(15, 0, 0, 0); grid.setConstraints(buttons, c); add(buttons); if (IJ.isMacintosh()) setResizable(false); pack(); setup(); if (centerDialog) GUI.center(this); setVisible(true); recorderOn = Recorder.record; IJ.wait(50); // work around for Sun/WinNT bug } /* For plugins that read their input only via dialogItemChanged, call it at least once */ if (!wasCanceled && dialogListeners != null && dialogListeners.size() > 0) { resetCounters(); ((DialogListener) dialogListeners.elementAt(0)).dialogItemChanged(this, null); recorderOn = false; } resetCounters(); }
public BandAdjuster() { super("Threshold Colour"); if (instance != null) { instance.toFront(); return; } imp = WindowManager.getCurrentImage(); if (imp == null) { IJ.beep(); IJ.showStatus("No image"); return; } IJ.run("Select None"); thread = new Thread(this, "BandAdjuster"); WindowManager.addWindow(this); instance = this; IJ.register(PasteController.class); ij = IJ.getInstance(); Font font = new Font("SansSerif", Font.PLAIN, 10); GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); setLayout(gridbag); int y = 0; c.gridx = 0; c.gridy = y; c.gridwidth = 1; c.weightx = 0; c.insets = new Insets(5, 0, 0, 0); labelh = new Label("Hue", Label.CENTER); add(labelh, c); c.gridx = 1; c.gridy = y++; c.gridwidth = 1; c.weightx = 0; c.insets = new Insets(7, 0, 0, 0); labelf = new Label("Filter type", Label.RIGHT); add(labelf, c); // plot c.gridx = 0; c.gridy = y; c.gridwidth = 1; c.fill = c.BOTH; c.anchor = c.CENTER; c.insets = new Insets(0, 5, 0, 0); add(plot, c); // checkboxes panelh = new Panel(); filterTypeH = new CheckboxGroup(); bandPassH = new Checkbox("Pass"); bandPassH.setCheckboxGroup(filterTypeH); bandPassH.addItemListener(this); panelh.add(bandPassH); bandStopH = new Checkbox("Stop"); bandStopH.setCheckboxGroup(filterTypeH); bandStopH.addItemListener(this); panelh.add(bandStopH); bandPassH.setState(true); c.gridx = 1; c.gridy = y++; c.gridwidth = 2; c.insets = new Insets(5, 0, 0, 0); add(panelh, c); // minHue slider minSlider = new Scrollbar(Scrollbar.HORIZONTAL, 0, 1, 0, sliderRange); c.gridx = 0; c.gridy = y++; c.gridwidth = 1; c.weightx = IJ.isMacintosh() ? 90 : 100; c.fill = c.HORIZONTAL; c.insets = new Insets(5, 5, 0, 0); add(minSlider, c); minSlider.addAdjustmentListener(this); minSlider.setUnitIncrement(1); // minHue slider label c.gridx = 1; c.gridwidth = 1; c.weightx = IJ.isMacintosh() ? 10 : 0; c.insets = new Insets(5, 0, 0, 0); label1 = new Label(" ", Label.LEFT); label1.setFont(font); add(label1, c); // maxHue sliderHue maxSlider = new Scrollbar(Scrollbar.HORIZONTAL, 0, 1, 0, sliderRange); c.gridx = 0; c.gridy = y; c.gridwidth = 1; c.weightx = 100; c.insets = new Insets(5, 5, 0, 0); add(maxSlider, c); maxSlider.addAdjustmentListener(this); maxSlider.setUnitIncrement(1); // maxHue slider label c.gridx = 1; c.gridwidth = 1; c.gridy = y++; c.weightx = 0; c.insets = new Insets(5, 0, 0, 0); label2 = new Label(" ", Label.LEFT); label2.setFont(font); add(label2, c); // ===== c.gridx = 0; c.gridy = y++; c.gridwidth = 1; c.weightx = 0; c.insets = new Insets(10, 0, 0, 0); labels = new Label("Saturation", Label.CENTER); add(labels, c); // plot c.gridx = 0; c.gridy = y; c.gridwidth = 1; c.fill = c.BOTH; c.anchor = c.CENTER; c.insets = new Insets(0, 5, 0, 0); add(splot, c); // checkboxes panels = new Panel(); filterTypeS = new CheckboxGroup(); bandPassS = new Checkbox("Pass"); bandPassS.setCheckboxGroup(filterTypeS); bandPassS.addItemListener(this); panels.add(bandPassS); bandStopS = new Checkbox("Stop"); bandStopS.setCheckboxGroup(filterTypeS); bandStopS.addItemListener(this); panels.add(bandStopS); bandPassS.setState(true); c.gridx = 1; c.gridy = y++; c.gridwidth = 2; c.insets = new Insets(5, 0, 0, 0); add(panels, c); // minSat slider minSlider2 = new Scrollbar(Scrollbar.HORIZONTAL, 0, 1, 0, sliderRange); c.gridx = 0; c.gridy = y++; c.gridwidth = 1; c.weightx = IJ.isMacintosh() ? 90 : 100; c.fill = c.HORIZONTAL; c.insets = new Insets(5, 5, 0, 0); add(minSlider2, c); minSlider2.addAdjustmentListener(this); minSlider2.setUnitIncrement(1); // minSat slider label c.gridx = 1; c.gridwidth = 1; c.weightx = IJ.isMacintosh() ? 10 : 0; c.insets = new Insets(5, 0, 0, 0); label3 = new Label(" ", Label.LEFT); label3.setFont(font); add(label3, c); // maxSat slider maxSlider2 = new Scrollbar(Scrollbar.HORIZONTAL, 0, 1, 0, sliderRange); c.gridx = 0; c.gridy = y++; c.gridwidth = 1; c.weightx = 100; c.insets = new Insets(5, 5, 0, 0); add(maxSlider2, c); maxSlider2.addAdjustmentListener(this); maxSlider2.setUnitIncrement(1); // maxSat slider label c.gridx = 1; c.gridwidth = 1; c.weightx = 0; c.insets = new Insets(5, 0, 0, 0); label4 = new Label(" ", Label.LEFT); label4.setFont(font); add(label4, c); // ===== c.gridx = 0; c.gridwidth = 1; c.gridy = y++; c.weightx = 0; c.insets = new Insets(10, 0, 0, 0); labelb = new Label("Brightness", Label.CENTER); add(labelb, c); c.gridx = 0; c.gridwidth = 1; c.gridy = y; c.fill = c.BOTH; c.anchor = c.CENTER; c.insets = new Insets(0, 5, 0, 0); add(bplot, c); // checkboxes panelb = new Panel(); filterTypeB = new CheckboxGroup(); bandPassB = new Checkbox("Pass"); bandPassB.setCheckboxGroup(filterTypeB); bandPassB.addItemListener(this); panelb.add(bandPassB); bandStopB = new Checkbox("Stop"); bandStopB.setCheckboxGroup(filterTypeB); bandStopB.addItemListener(this); panelb.add(bandStopB); bandPassB.setState(true); c.gridx = 1; c.gridy = y++; c.gridwidth = 2; c.insets = new Insets(5, 0, 0, 0); add(panelb, c); // minBri slider minSlider3 = new Scrollbar(Scrollbar.HORIZONTAL, 0, 1, 0, sliderRange); c.gridx = 0; c.gridy = y++; c.gridwidth = 1; c.weightx = IJ.isMacintosh() ? 90 : 100; c.fill = c.HORIZONTAL; c.insets = new Insets(5, 5, 0, 0); add(minSlider3, c); minSlider3.addAdjustmentListener(this); minSlider3.setUnitIncrement(1); // minBri slider label c.gridx = 1; c.gridwidth = 1; c.weightx = IJ.isMacintosh() ? 10 : 0; c.insets = new Insets(5, 0, 0, 0); label5 = new Label(" ", Label.LEFT); label5.setFont(font); add(label5, c); // maxBri slider maxSlider3 = new Scrollbar(Scrollbar.HORIZONTAL, 0, 1, 0, sliderRange); c.gridx = 0; c.gridy = y++; c.gridwidth = 1; c.weightx = 100; c.insets = new Insets(5, 5, 0, 0); add(maxSlider3, c); maxSlider3.addAdjustmentListener(this); maxSlider3.setUnitIncrement(1); // maxBri slider label c.gridx = 1; c.gridwidth = 1; c.weightx = 0; c.insets = new Insets(5, 0, 0, 0); label6 = new Label(" ", Label.LEFT); label6.setFont(font); add(label6, c); // ===== panelt = new Panel(); threshold = new Checkbox("Threshold"); threshold.addItemListener(this); panelt.add(threshold); invert = new Checkbox("Invert"); invert.addItemListener(this); panelt.add(invert); c.gridx = 0; c.gridy = y++; c.gridwidth = 2; c.insets = new Insets(0, 0, 0, 0); add(panelt, c); // buttons panel = new Panel(); // panel.setLayout(new GridLayout(2, 2, 0, 0)); originalB = new Button("Original"); originalB.setEnabled(false); originalB.addActionListener(this); originalB.addKeyListener(ij); panel.add(originalB); filteredB = new Button("Filtered"); filteredB.setEnabled(false); filteredB.addActionListener(this); filteredB.addKeyListener(ij); panel.add(filteredB); stackB = new Button("Stack"); stackB.addActionListener(this); stackB.addKeyListener(ij); panel.add(stackB); helpB = new Button("Help"); helpB.addActionListener(this); helpB.addKeyListener(ij); panel.add(helpB); c.gridx = 0; c.gridy = y++; c.gridwidth = 2; c.insets = new Insets(0, 0, 0, 0); add(panel, c); panelMode = new Panel(); sampleB = new Button("Sample"); sampleB.addActionListener(this); sampleB.addKeyListener(ij); panelMode.add(sampleB); colourMode = new CheckboxGroup(); hsb = new Checkbox("HSB"); hsb.setCheckboxGroup(colourMode); hsb.addItemListener(this); panelMode.add(hsb); hsb.setState(true); rgb = new Checkbox("RGB"); rgb.setCheckboxGroup(colourMode); rgb.addItemListener(this); panelMode.add(rgb); c.gridx = 0; c.gridy = y++; c.gridwidth = 2; c.insets = new Insets(0, 0, 0, 0); add(panelMode, c); addKeyListener(ij); // ImageJ handles keyboard shortcuts pack(); GUI.center(this); setVisible(true); ip = setup(imp); if (ip == null) { imp.unlock(); IJ.beep(); IJ.showStatus("RGB image cannot be thresholded"); return; } thread.start(); }
void sample() { byte[] hsSource, ssSource, bsSource; // ImageProcessor ip2; // ip2 = imp.getProcessor(); Rectangle myroi = ip.getRoi(); int swidth = myroi.width; int sheight = myroi.height; int sy = myroi.y; int sx = myroi.x; if (swidth == width && sheight == height) { IJ.showMessage("Select a rectangular ROI"); IJ.beep(); return; } IJ.run("Select None"); int snumPixels = swidth * sheight; hsSource = new byte[snumPixels]; ssSource = new byte[snumPixels]; bsSource = new byte[snumPixels]; int[] pixs = new int[snumPixels]; int[] bin = new int[256]; int counter = 0, pi = 0, rangePassH = 0, rangeStopH = 0, rangePassL = 0, rangeStopL = 0, i, j; for (i = sy; i < sy + sheight; i++) { for (j = sx; j < sx + swidth; j++) { pixs[counter++] = ip.getPixel(j, i); } } // Get hsb or rgb from roi. ColorProcessor cp2 = new ColorProcessor(swidth, sheight, pixs); int iminhue = 256, imaxhue = -1, iminsat = 256, imaxsat = -1, iminbri = 256, imaxbri = -1; int iminred = 256, imaxred = -1, imingre = 256, imaxgre = -1, iminblu = 256, imaxblu = -1; if (isRGB) cp2.getRGB(hsSource, ssSource, bsSource); else cp2.getHSB(hsSource, ssSource, bsSource); for (i = 0; i < snumPixels; i++) { bin[hsSource[i] & 255] = 1; if ((hsSource[i] & 255) > imaxhue) imaxhue = (hsSource[i] & 255); if ((hsSource[i] & 255) < iminhue) iminhue = (hsSource[i] & 255); if ((ssSource[i] & 255) > imaxsat) imaxsat = (ssSource[i] & 255); if ((ssSource[i] & 255) < iminsat) iminsat = (ssSource[i] & 255); if ((bsSource[i] & 255) > imaxbri) imaxbri = (bsSource[i] & 255); if ((bsSource[i] & 255) < iminbri) iminbri = (bsSource[i] & 255); // IJ.showMessage("h:"+minhue+"H:"+maxhue+"s:"+minsat+"S:"+maxsat+"b:"+minbri+"B:"+maxbri); } if (!isRGB) { // get pass or stop filter whichever has a narrower range for (i = 0; i < 256; i++) { if (bin[i] > 0) { rangePassL = i; break; } } for (i = 255; i >= 0; i--) { if (bin[i] > 0) { rangePassH = i; break; } } for (i = 0; i < 256; i++) { if (bin[i] == 0) { rangeStopL = i; break; } } for (i = 255; i >= 0; i--) { if (bin[i] == 0) { rangeStopH = i; break; } } if ((rangePassH - rangePassL) < (rangeStopH - rangeStopL)) { bandPassH.setState(true); bandStopH.setState(false); iminhue = rangePassL; imaxhue = rangePassH; } else { bandPassH.setState(false); bandStopH.setState(true); iminhue = rangeStopL; imaxhue = rangeStopH; } } else { bandPassH.setState(true); bandStopH.setState(false); } adjustMinHue(iminhue); minSlider.setValue(iminhue); adjustMaxHue(imaxhue); maxSlider.setValue(imaxhue); adjustMinSat(iminsat); minSlider2.setValue(iminsat); adjustMaxSat(imaxsat); maxSlider2.setValue(imaxsat); adjustMinBri(iminbri); minSlider3.setValue(iminbri); adjustMaxBri(imaxbri); maxSlider3.setValue(imaxbri); originalB.setEnabled(true); // IJ.showStatus("done"); }
/*------------------------------------------------------------------*/ differentialsDialog(Frame parentWindow, String title, boolean isModal, int operation) { super(parentWindow, title, isModal); setLayout(new GridLayout(0, 1)); Checkbox gradientMagnitude = new Checkbox("Gradient Magnitude", choice, false); Checkbox gradientDirection = new Checkbox("Gradient Direction", choice, false); Checkbox laplacian = new Checkbox("Laplacian", choice, false); Checkbox largestHessian = new Checkbox("Largest Hessian", choice, false); Checkbox smallestHessian = new Checkbox("Smallest Hessian", choice, false); Checkbox hessianOrientation = new Checkbox("Hessian Orientation", choice, false); this.operation = operation; switch (operation) { case Differentials_.GRADIENT_MAGNITUDE: choice.setSelectedCheckbox(gradientMagnitude); break; case Differentials_.GRADIENT_DIRECTION: choice.setSelectedCheckbox(gradientDirection); break; case Differentials_.LAPLACIAN: choice.setSelectedCheckbox(laplacian); break; case Differentials_.LARGEST_HESSIAN: choice.setSelectedCheckbox(largestHessian); break; case Differentials_.SMALLEST_HESSIAN: choice.setSelectedCheckbox(smallestHessian); break; case Differentials_.HESSIAN_ORIENTATION: choice.setSelectedCheckbox(hessianOrientation); break; default: cancel = true; IJ.error("Unexpected operation ID"); setVisible(false); } gradientMagnitude.addItemListener(this); gradientDirection.addItemListener(this); laplacian.addItemListener(this); largestHessian.addItemListener(this); smallestHessian.addItemListener(this); hessianOrientation.addItemListener(this); Label separation1 = new Label(""); Label separation2 = new Label(""); Label separation3 = new Label(""); Label separation4 = new Label(""); Panel buttonPanel = new Panel(); buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER)); Button cancelButton = new Button("Cancel"); Button okButton = new Button("OK"); cancelButton.addActionListener(this); okButton.addActionListener(this); buttonPanel.add(cancelButton); buttonPanel.add(okButton); add(separation1); add(gradientMagnitude); add(gradientDirection); add(separation2); add(laplacian); add(separation3); add(largestHessian); add(smallestHessian); add(hessianOrientation); add(separation4); add(buttonPanel); pack(); } /* end differentialsDialog */