Squiz Matrix  4.12.2
 All Data Structures Namespaces Functions Variables Pages
CanvasResizer.java
1 package ij.plugin;
2 import ij.*;
3 import ij.plugin.filter.*;
4 import ij.process.*;
5 import ij.gui.*;
6 import java.awt.*;
7 
13 public class CanvasResizer implements PlugIn {
14  boolean zeroFill = Prefs.get("resizer.zero", false);
15 
16  public void run(String arg) {
17  int wOld, hOld, wNew, hNew;
18 
19  ImagePlus imp = IJ.getImage();
20  wOld = imp.getWidth();
21  hOld = imp.getHeight();
22 
23  String[] sPositions = {
24  "Top-Left", "Top-Center", "Top-Right",
25  "Center-Left", "Center", "Center-Right",
26  "Bottom-Left", "Bottom-Center", "Bottom-Right"
27  };
28 
29  String strTitle = "Resize Image Canvas";
30  GenericDialog gd = new GenericDialog(strTitle);
31  gd.addNumericField("Width:", wOld, 0, 5, "pixels");
32  gd.addNumericField("Height:", hOld, 0, 5, "pixels");
33  gd.addChoice("Position:", sPositions, sPositions[4]);
34  gd.addCheckbox("Zero Fill", zeroFill);
35  gd.showDialog();
36  if (gd.wasCanceled())
37  return;
38 
39  wNew = (int)gd.getNextNumber();
40  hNew = (int)gd.getNextNumber();
41  int iPos = gd.getNextChoiceIndex();
42  zeroFill = gd.getNextBoolean();
43  Prefs.set("resizer.zero", zeroFill);
44 
45  int xOff, yOff;
46  int xC = (wNew - wOld)/2; // offset for centered
47  int xR = (wNew - wOld); // offset for right
48  int yC = (hNew - hOld)/2; // offset for centered
49  int yB = (hNew - hOld); // offset for bottom
50 
51  switch(iPos) {
52  case 0: // TL
53  xOff=0; yOff=0; break;
54  case 1: // TC
55  xOff=xC; yOff=0; break;
56  case 2: // TR
57  xOff=xR; yOff=0; break;
58  case 3: // CL
59  xOff=0; yOff=yC; break;
60  case 4: // C
61  xOff=xC; yOff=yC; break;
62  case 5: // CR
63  xOff=xR; yOff=yC; break;
64  case 6: // BL
65  xOff=0; yOff=yB; break;
66  case 7: // BC
67  xOff=xC; yOff=yB; break;
68  case 8: // BR
69  xOff=xR; yOff=yB; break;
70  default: // center
71  xOff=xC; yOff=yC; break;
72  }
73 
74  Undo.setup(Undo.COMPOUND_FILTER, imp);
75  ImageProcessor newIP = expandImage(imp.getProcessor(), wNew, hNew, xOff, yOff);
76  imp.setProcessor(null, newIP);
77  Undo.setup(Undo.COMPOUND_FILTER_DONE, imp);
78  }
79 
80  public ImageProcessor expandImage(ImageProcessor ipOld, int wNew, int hNew, int xOff, int yOff) {
81  ImageProcessor ipNew = ipOld.createProcessor(wNew, hNew);
82  if (zeroFill)
83  ipNew.setValue(0.0);
84  else
85  ipNew.setColor(Toolbar.getBackgroundColor());
86  ipNew.fill();
87  ipNew.insert(ipOld, xOff, yOff);
88  return ipNew;
89  }
90 
91 }
92