LineExtractorGUI.java

package ac.essex.ooechs.imaging.commons.subpixel; 
 
import ac.essex.ooechs.imaging.commons.util.panels.ImagePanel; 
import ac.essex.ooechs.imaging.commons.util.panels.FileTree; 
import ac.essex.ooechs.imaging.commons.util.ImageFilenameFilter; 
import ac.essex.ooechs.imaging.commons.PixelLoader; 
 
import javax.swing.*; 
import java.io.File; 
import java.awt.*; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseMotionAdapter; 
 
public class LineExtractorGUI extends JFrame { 
 
    protected ImagePanel p; 
    protected JButton load, segment; 
 
    private int startX, startY; 
 
    ImagePanel p2; 
 
    public LineExtractorGUI(File file) { 
        super("Line Crawler GUI"); 
 
        p2 = new ImagePanel(); 
        p2.setPreferredSize(new Dimension(100, -1)); 
 
        p = new ImagePanel(); 
 
        p.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); 
 
        p.addMouseListener(new MouseAdapter() { 
 
            public void mousePressed(MouseEvent e) { 
                startX = p.getX(e); 
                startY = p.getY(e); 
            } 
 
            public void mouseReleased(MouseEvent e)  { 
                int endX = p.getX(e); 
                int endY = p.getY(e); 
 
                double dx = startX - endX; 
                double dy = startY - endY; 
 
                // find the mid point 
                double mx = startX - (dx / 2); 
                double my = startY - (dy / 2); 
 
                Graphics g = p.getGraphics(); 
                g.drawLine(startX, startY, p.getX(e), p.getY(e)); 
                g.drawRect((int) mx, (int) my, 1,1); 
 
                PixelLoader image = new PixelLoader(p.getImage()); 
                p2.setImage(LineExtractor.extract(image, 50, startX, startY, endX, endY)); 
 
            } 
 
        }); 
 
        p.addMouseMotionListener(new MouseMotionAdapter() { 
            public void mouseDragged(MouseEvent e) { 
 
                    Graphics g = p.getGraphics(); 
                    p.drawImage(g, p.getImage()); 
                    g.setColor(Color.RED); 
                    g.drawLine(startX, startY, p.getX(e), p.getY(e)); 
 
            } 
        }); 
 
        FileTree f = new FileTree(file, new ImageFilenameFilter()) { 
 
            /** 
             * Called when a file is selected in the tree 
             */ 
            public void onSelectFile(File f) { 
                loadImage(f); 
            } 
 
        }; 
 
        JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, new JScrollPane(f), new JScrollPane(p)); 
 
        getContentPane().add(splitPane); 
        getContentPane().add(p2, BorderLayout.EAST); 
        setDefaultCloseOperation(EXIT_ON_CLOSE); 
        setSize(980, 480); 
        setVisible(true); 
    } 
    protected void loadImage(File f) { 
        if (f != null) { 
            try { 
                p.setImage(new PixelLoader(f)); 
            } catch (Exception err) { 
                err.printStackTrace(); 
            } 
        } 
    } 
 
 
 
    protected void crawl() { 
        new Thread() { 
            public void run() { 
 
 
 
            } 
        }.start(); 
    } 
 
    public static void main(String args[]) { 
        File directory = new File("/home/ooechs/Desktop/Documents/Papers/Pipelines/data"); 
        new LineExtractorGUI(directory); 
    } 
 
}