From 4148c1788af6b4ca41131b0116f872dceb9b5b46 Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Fri, 28 Dec 2018 19:46:34 -0600 Subject: [PATCH] Created initial tracking of numbers for the Bandori Tracker. --- BandoriTracker/.classpath | 6 + .../New_Builder (4).launch | 13 + BandoriTracker/.project | 27 ++ .../.settings/org.eclipse.jdt.core.prefs | 11 + BandoriTracker/HelloWorld.jar | Bin 0 -> 11215 bytes BandoriTracker/bin/.gitignore | 1 + BandoriTracker/projectBuilder.xml | 18 + .../src/sig/tracker/BandoriTracker.java | 326 ++++++++++++++++++ .../src/sig/tracker/DrawOnComponent.java | 203 +++++++++++ 9 files changed, 605 insertions(+) create mode 100644 BandoriTracker/.classpath create mode 100644 BandoriTracker/.externalToolBuilders/New_Builder (4).launch create mode 100644 BandoriTracker/.project create mode 100644 BandoriTracker/.settings/org.eclipse.jdt.core.prefs create mode 100644 BandoriTracker/HelloWorld.jar create mode 100644 BandoriTracker/bin/.gitignore create mode 100644 BandoriTracker/projectBuilder.xml create mode 100644 BandoriTracker/src/sig/tracker/BandoriTracker.java create mode 100644 BandoriTracker/src/sig/tracker/DrawOnComponent.java diff --git a/BandoriTracker/.classpath b/BandoriTracker/.classpath new file mode 100644 index 0000000..d171cd4 --- /dev/null +++ b/BandoriTracker/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/BandoriTracker/.externalToolBuilders/New_Builder (4).launch b/BandoriTracker/.externalToolBuilders/New_Builder (4).launch new file mode 100644 index 0000000..b8ff294 --- /dev/null +++ b/BandoriTracker/.externalToolBuilders/New_Builder (4).launch @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/BandoriTracker/.project b/BandoriTracker/.project new file mode 100644 index 0000000..0b306d3 --- /dev/null +++ b/BandoriTracker/.project @@ -0,0 +1,27 @@ + + + BandoriTracker + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.ui.externaltools.ExternalToolBuilder + full,incremental, + + + LaunchConfigHandle + <project>/.externalToolBuilders/New_Builder (4).launch + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/BandoriTracker/.settings/org.eclipse.jdt.core.prefs b/BandoriTracker/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..bb35fa0 --- /dev/null +++ b/BandoriTracker/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/BandoriTracker/HelloWorld.jar b/BandoriTracker/HelloWorld.jar new file mode 100644 index 0000000000000000000000000000000000000000..1b5a88ee9df64c84e1ffe93f15c5edb8108b6fc4 GIT binary patch literal 11215 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 + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BandoriTracker/src/sig/tracker/BandoriTracker.java b/BandoriTracker/src/sig/tracker/BandoriTracker.java new file mode 100644 index 0000000..c1cf4fa --- /dev/null +++ b/BandoriTracker/src/sig/tracker/BandoriTracker.java @@ -0,0 +1,326 @@ +package sig.tracker; + +import java.awt.AWTException; +import java.awt.Color; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Robot; +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import javax.imageio.ImageIO; +import javax.swing.JFileChooser; +import javax.swing.JFrame; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import javax.swing.Timer; + +public class BandoriTracker { + public static BufferedImage capture; + public static BufferedImage footprint_img; + public static Robot robot = null; + static UpdateEvent runEvent = new UpdateEvent(); + static Timer programClock = new Timer(16,runEvent); + public static DrawPanel panel; + public static final ModeType MODE = ModeType.FOOTPRINT; + public static ModeType FOOTPRINT_MODE = ModeType.FOOTPRINT_ORIGIN1; + public static Point origin1,origin2; + public static Character character; + public static DChar displayedFootprint; + public static List footprint_database = new ArrayList(); + public static void main(String[] args) { + try { + robot = new Robot(); + } catch (AWTException e) { + e.printStackTrace(); + } + capture = robot.createScreenCapture(new Rectangle(0,0,(int)Toolkit.getDefaultToolkit().getScreenSize().getWidth(),(int)Toolkit.getDefaultToolkit().getScreenSize().getHeight())); + + JFrame f = new JFrame(); + panel = new DrawPanel(); + f.add(panel); + f.pack(); + f.setSize(500, 500); + f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + f.setVisible(true); + } + + }); + programClock.start(); + + switch (MODE) { + case FOOTPRINT:{ + JFileChooser browse = new JFileChooser(); + browse.setDialogTitle("Select Footprint File"); + if (browse.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { + String fileloc = browse.getSelectedFile().getAbsolutePath(); + try { + footprint_img = ImageIO.read(new File(fileloc)); + JOptionPane.showMessageDialog(null, "Click on origin location."); + FOOTPRINT_MODE = ModeType.FOOTPRINT_ORIGIN1; + ChangeCursor(Cursor.CROSSHAIR_CURSOR); + } catch (IOException e) { + e.printStackTrace(); + } + } + }break; + default:{ + + } + } + } + public static void ChangeCursor(int cursor) { + BandoriTracker.panel.setCursor(Cursor.getPredefinedCursor(cursor)); + } +} + +class DrawPanel extends JPanel implements MouseListener{ + + DrawPanel() { + addMouseListener(this); + } + + public Dimension getPreferredSize() { + return new Dimension(1280,480); + } + + public void paintComponent(Graphics g) { + switch (BandoriTracker.MODE) { + case FOOTPRINT:{ + if (DisplaySampledFootprint()) { + g.clearRect(0, 0, getWidth(), getHeight()); + BandoriTracker.displayedFootprint.draw(14,new Point(0,0),g); + BandoriTracker.displayedFootprint.draw(BandoriTracker.displayedFootprint.initial_size,new Point(32,0),g); + BandoriTracker.displayedFootprint.draw(32,new Point(64,0),g); + } else + if (BandoriTracker.footprint_img!=null) { + g.drawImage(BandoriTracker.footprint_img, 0,0, null); + } + }break; + default:{ + if (BandoriTracker.capture!=null) { + g.drawImage(BandoriTracker.capture, 0, 0, BandoriTracker.capture.getWidth()/2, BandoriTracker.capture.getHeight()/2, null); + } + } + } + } + + @Override + public void mouseClicked(MouseEvent e) { + } + + @Override + public void mousePressed(MouseEvent e) { + if (GettingFirstClick()) { + BandoriTracker.origin1 = e.getPoint(); + BandoriTracker.FOOTPRINT_MODE = ModeType.FOOTPRINT_ORIGIN2; + JOptionPane.showMessageDialog(null, "Click on ending location."); + } else + if (GettingSecondClick()) { + BandoriTracker.origin2 = e.getPoint(); + BandoriTracker.FOOTPRINT_MODE = ModeType.FOOTPRINT_CHARACTER; + BandoriTracker.ChangeCursor(Cursor.DEFAULT_CURSOR); + String input = JOptionPane.showInputDialog("What character is this representing?"); + BandoriTracker.character = input.charAt(0); + + DChar footprint = new DChar(BandoriTracker.footprint_img,BandoriTracker.character,BandoriTracker.origin1,BandoriTracker.origin2); + BandoriTracker.footprint_database.add(BandoriTracker.displayedFootprint = footprint); + BandoriTracker.FOOTPRINT_MODE = ModeType.FOOTPRINT_PRINT; + } + + //System.out.println("Clicked: "+e.getX()+","+e.getY()); + } + + @Override + public void mouseReleased(MouseEvent e) { + // TODO Auto-generated method stub + + } + + @Override + public void mouseEntered(MouseEvent e) { + // TODO Auto-generated method stub + + } + + @Override + public void mouseExited(MouseEvent e) { + // TODO Auto-generated method stub + + } + + boolean GettingFirstClick() { + return BandoriTracker.MODE == ModeType.FOOTPRINT && BandoriTracker.FOOTPRINT_MODE == ModeType.FOOTPRINT_ORIGIN1; + } + boolean GettingSecondClick() { + return BandoriTracker.MODE == ModeType.FOOTPRINT && BandoriTracker.FOOTPRINT_MODE == ModeType.FOOTPRINT_ORIGIN2; + } + boolean DisplaySampledFootprint() { + return BandoriTracker.MODE == ModeType.FOOTPRINT && BandoriTracker.FOOTPRINT_MODE == ModeType.FOOTPRINT_PRINT; + } +} +class UpdateEvent implements ActionListener { + @Override + public void actionPerformed(ActionEvent e) { + BandoriTracker.capture = BandoriTracker.robot.createScreenCapture(new Rectangle(9+66,30+10,(int)Toolkit.getDefaultToolkit().getScreenSize().getWidth()-18-66*2,(int)Toolkit.getDefaultToolkit().getScreenSize().getHeight()-62-10*2)); + BandoriTracker.panel.repaint(); + } +} + +class DChar { + Character character; + Point[] points; + Integer initial_size; + + DChar(Image ref_img, Character c, Point origin1, Point origin2){ + Color back_col; + this.character=c; + BufferedImage img = toBufferedImage(ref_img); + int width = origin2.x-origin1.x; + int[] pixels = img.getRGB(origin1.x, origin1.y, width, origin2.y-origin1.y, null, 0, width); + System.out.println(Arrays.toString(pixels)); + //First trim the image. + int top_height = -1; + int bottom_height = -1; + for (int j=0;j=0;j--) { + for (int i=width-1;i>=0;i--) { + if (ColorMeetsThreshold(pixels[i+j*width],25)) { + //Found bottom-most pixel. + bottom_height=j+1; + break; + } + } + if (bottom_height!=-1) { + break; + } + } + int left_width = -1; + int right_width = -1; + for (int i=0;i=0;i--) { + for (int j=pixels.length/width-1;j>=0;j--) { + if (ColorMeetsThreshold(pixels[i+j*width],25)) { + right_width=i; + break; + } + } + if (right_width!=-1) { + break; + } + } + //System.out.println("TOP:"+top_height+",BOTTOM:"+bottom_height+",LEFT:"+left_width+",RIGHT:"+right_width+". Size: "+pixels.length); + pixels = Arrays.copyOfRange(pixels, top_height*width, bottom_height*width); + int goodpixels = 0; + for (int i=0;iright_width) { + pixels[i]=Integer.MAX_VALUE; + } else { + goodpixels++; + } + } + int[] trim_pixels = new int[goodpixels]; + int goodpixelslot = 0; + for (int i=0;i pointlist = new ArrayList(); + for (int j=0;j coloredRectangles = new ArrayList(); + private Rectangle shape; + + public DrawingArea() + { + setBackground(Color.WHITE); + + MyMouseListener ml = new MyMouseListener(); + addMouseListener(ml); + addMouseMotionListener(ml); + } + + @Override + public Dimension getPreferredSize() + { + return isPreferredSizeSet() ? + super.getPreferredSize() : new Dimension(AREA_SIZE, AREA_SIZE); + } + + @Override + protected void paintComponent(Graphics g) + { + super.paintComponent(g); + + // Custom code to paint all the Rectangles from the List + + Color foreground = g.getColor(); + + g.setColor( Color.BLACK ); + g.drawString("Add a rectangle by doing mouse press, drag and release!", 40, 15); + + for (DrawingArea.ColoredRectangle cr : coloredRectangles) + { + g.setColor( cr.getForeground() ); + Rectangle r = cr.getRectangle(); + g.drawRect(r.x, r.y, r.width, r.height); + } + + // Paint the Rectangle as the mouse is being dragged + + if (shape != null) + { + Graphics2D g2d = (Graphics2D)g; + g2d.setColor( foreground ); + g2d.draw( shape ); + } + } + + public void addRectangle(Rectangle rectangle, Color color) + { + // Add the Rectangle to the List so it can be repainted + + ColoredRectangle cr = new ColoredRectangle(color, rectangle); + coloredRectangles.add( cr ); + repaint(); + } + + public void clear() + { + coloredRectangles.clear(); + repaint(); + } + + class MyMouseListener extends MouseInputAdapter + { + private Point startPoint; + + public void mousePressed(MouseEvent e) + { + startPoint = e.getPoint(); + shape = new Rectangle(); + } + + public void mouseDragged(MouseEvent e) + { + int x = Math.min(startPoint.x, e.getX()); + int y = Math.min(startPoint.y, e.getY()); + int width = Math.abs(startPoint.x - e.getX()); + int height = Math.abs(startPoint.y - e.getY()); + + shape.setBounds(x, y, width, height); + repaint(); + } + + public void mouseReleased(MouseEvent e) + { + if (shape.width != 0 || shape.height != 0) + { + addRectangle(shape, e.getComponent().getForeground()); + } + + shape = null; + } + } + + class ColoredRectangle + { + private Color foreground; + private Rectangle rectangle; + + public ColoredRectangle(Color foreground, Rectangle rectangle) + { + this.foreground = foreground; + this.rectangle = rectangle; + } + + public Color getForeground() + { + return foreground; + } + + public void setForeground(Color foreground) + { + this.foreground = foreground; + } + + public Rectangle getRectangle() + { + return rectangle; + } + } + } +} \ No newline at end of file