Administrator
|
I've been REALLY impressed by ImageJ, the free java image processing
suite. I sent out the home page pointer the other day, but then tumbled into these applets. The first is a grayscale set of manipulations, the second color. http://rsb.info.nih.gov/ij/ip-demo1/ http://rsb.info.nih.gov/ij/ip-demo2/ They are really fast! And interestingly enough, the code is really trivial. I attach one of the applet's code for you to see how simple it is. Life is good! -- Owen Owen Densmore 908 Camino Santander Santa Fe, NM 87505 Cell: 505-570-0168 Home: 505-988-3787 http://backspaces.net import ij.*; import java.applet.*; import java.awt.*; import ij.process.*; /**Simple applet that demonstrates how to use ImageJ's ImageProcessor class.*/ public class IPDemo extends Applet { String name; Image img; ImageProcessor ip = null; public void init() { setLayout(new BorderLayout()); Panel p = new Panel(); p.setLayout(new GridLayout(5, 3)); p.add(new Button("Reset")); p.add(new Button("Flip")); p.add(new Button("Invert")); p.add(new Button("Lighten")); p.add(new Button("Darken")); p.add(new Button("Rotate")); p.add(new Button("Zoom In")); p.add(new Button("Zoom Out")); p.add(new Button("Threshsold")); p.add(new Button("Smooth")); p.add(new Button("Sharpen")); p.add(new Button("Find Edges")); p.add(new Button("Macro 1")); p.add(new Button("Macro 2")); p.add(new Button("Add Noise")); add("South", p); name = getParameter("img"); img = getImage(getDocumentBase(), name); MediaTracker tracker = new MediaTracker(this); tracker.addImage(img, 0); try {tracker.waitForID(0);} catch (InterruptedException e){} if (name.endsWith("jpg")) ip = new ColorProcessor(img); else ip = new ByteProcessor(img); ip.snapshot(); } public void update(Graphics g) { paint(g); } public void paint(Graphics g) { g.drawImage(img, 0, 0, this); } public boolean action(Event e, Object arg) { if (e.target instanceof Button) { String label = (String)arg; if (label.equals("Reset")) ip.reset(); else if (label.equals("Flip")) ip.flipVertical(); else if (label.equals("Invert")) ip.invert(); else if (label.equals("Lighten")) ip.multiply(1.1); else if (label.equals("Darken")) ip.multiply(0.9); else if (label.equals("Rotate")) ip.rotate(30); else if (label.equals("Zoom In")) ip.scale(1.2, 1.2); else if (label.equals("Zoom Out")) ip.scale(0.8, 0.8); else if (label.equals("Threshsold")) ip.autoThreshold(); else if (label.equals("Smooth")) ip.smooth(); else if (label.equals("Sharpen")) ip.sharpen(); else if (label.equals("Find Edges")) ip.findEdges(); else if (label.equals("Macro 1")) macro1(); else if (label.equals("Macro 2")) macro2(); else if (label.equals("Add Noise")) ip.noise(20); img = ip.createImage(); repaint(); return true; } return false; } void updateAndDraw() { img.flush(); img = ip.createImage(); getGraphics().drawImage(img, 0, 0, this); } void macro1() { for (int i=10; i<=360; i+=10) { ip.reset(); ip.rotate(i); updateAndDraw(); } } void macro2() { double scale = 1, m = 1.2; for (int i=0; i<20; i++) { ip.reset(); scale *= m; ip.scale(scale, scale); updateAndDraw(); } for (int i=0; i <20; i++) { ip.reset(); scale /= m; ip.scale(scale, scale); updateAndDraw(); } } } |
Free forum by Nabble | Edit this page |