Squiz Matrix  4.12.2
 All Data Structures Namespaces Functions Variables Pages
Scaler.java
1 package ij.plugin.filter;
2 import ij.*;
3 import ij.gui.*;
4 import ij.process.*;
5 import ij.measure.*;
6 import java.awt.*;
7 
9 public class Scaler implements PlugInFilter {
10  private ImagePlus imp;
11  private static double xscale = 0.5;
12  private static double yscale = 0.5;
13  private static boolean interpolate = true;
14 
15  public int setup(String arg, ImagePlus imp) {
16  this.imp = imp;
17  IJ.register(Scaler.class);
18  if (imp!=null) {
19  Roi roi = imp.getRoi();
20  if (roi!=null && !roi.isArea())
21  imp.killRoi(); // ignore any line selection
22  }
23  return DOES_ALL;
24  }
25 
26  public void run(ImageProcessor ip) {
27  if (!showDialog())
28  return;
29  ip.setInterpolate(interpolate);
30  imp.startTiming();
31  try {
32  scale(ip);
33  }
34  catch(OutOfMemoryError o) {
35  IJ.outOfMemory("Scale");
36  }
37  IJ.showProgress(1.0);
38  }
39 
40  void scale(ImageProcessor ip) {
41  ip.scale(xscale, yscale);
42  imp.killRoi();
43  }
44 
45  boolean showDialog() {
46  GenericDialog gd = new GenericDialog("Scale");
47  gd.addNumericField("X Scale (0.05-25):", xscale, 2);
48  gd.addNumericField("Y Scale (0.05-25):", yscale, 2);
49  gd.addCheckbox("Interpolate", interpolate);
50  gd.showDialog();
51 
52  if (gd.wasCanceled())
53  return false;
54  xscale = gd.getNextNumber();
55  yscale = gd.getNextNumber();
56  if (gd.invalidNumber()) {
57  IJ.error("X or Y scale are invalid.");
58  return false;
59  }
60  if (xscale > 25.0) xscale = 25.0;
61  if (xscale < 0.05) xscale = 0.05;
62  if (yscale > 25.0) yscale = 25.0;
63  if (yscale < 0.05) yscale = 0.05;
64  interpolate = gd.getNextBoolean();
65  return true;
66  }
67 
68 }