import java.awt.*; import java.awt.event.*; import java.awt.image.*; import javax.imageio.*; import java.io.*; import javax.swing.*; import java.lang.*; import java.awt.geom.*; import java.util.*; import javax.swing.Timer; class laserDrawing { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); } public static void createAndShowGUI() { final JFrame frame = new JFrame(); frame.setTitle("Laser Drawing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); BufferedImage defaultImage = new BufferedImage(660,500,BufferedImage.TYPE_INT_ARGB); BufferedImage img = null; final Point points[] = new Point[9]; try { for(int i=1;i<=9;i++) { img = ImageIO.read(new File("TLapse PNG 00"+i+".png")); //System.out.println("i: " + i); points[i-1]= findColor(img); } } catch (IOException e) { } BufferedImage img2 = new BufferedImage(660,500,BufferedImage.TYPE_INT_ARGB); BufferedImage attImage = new BufferedImage(100,500,BufferedImage.TYPE_INT_ARGB); final Panel panel = new Panel(img2,points,0); final Attributes attPanel = new Attributes(attImage, panel); panel.type = 0; JLabel label = new JLabel("Paint"); frame.getContentPane().add(panel,BorderLayout.CENTER); frame.getContentPane().add(label,BorderLayout.SOUTH); frame.getContentPane().add(attPanel,BorderLayout.EAST); frame.pack(); JMenu fileMenu = new JMenu("File"); JMenuItem saveItem = new JMenuItem("Save Image"); saveItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { String input = JOptionPane.showInputDialog("Enter the name of the output file: "); File outputFile = new File(input); try { javax.imageio.ImageIO.write(panel.image, "jpg", outputFile ); } catch ( IOException e ) { JOptionPane.showMessageDialog(frame,"Error saving file","oops!",JOptionPane.ERROR_MESSAGE ); } } }); JMenuItem exitItem = new JMenuItem("Exit"); exitItem.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent event) { System.exit(0); } }); JMenu typeMenu = new JMenu("Type"); JMenuItem paintItem = new JMenuItem("Paint"); paintItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { frame.getContentPane().removeAll(); BufferedImage img2 = new BufferedImage(660,500,BufferedImage.TYPE_INT_ARGB); BufferedImage attImage = new BufferedImage(100,500,BufferedImage.TYPE_INT_ARGB); final Panel panel = new Panel(img2,points,0); final Attributes attPanel = new Attributes(attImage, panel); panel.type = 0; JLabel label2 = new JLabel("Paint"); frame.getContentPane().add(panel,BorderLayout.CENTER); frame.getContentPane().add(label2,BorderLayout.SOUTH); frame.getContentPane().add(attPanel,BorderLayout.EAST); frame.pack(); } }); JMenuItem fireworksItem = new JMenuItem("Fireworks"); fireworksItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { frame.getContentPane().removeAll(); BufferedImage img2 = new BufferedImage(660,500,BufferedImage.TYPE_INT_ARGB); BufferedImage attImage = new BufferedImage(100,500,BufferedImage.TYPE_INT_ARGB); final Panel panel = new Panel(img2,points,1); final Attributes attPanel = new Attributes(attImage,panel); panel.type=1; JLabel label2 = new JLabel("Fireworks"); frame.getContentPane().add(panel,BorderLayout.CENTER); frame.getContentPane().add(label2,BorderLayout.SOUTH); frame.getContentPane().add(attPanel,BorderLayout.EAST); frame.pack(); } }); JMenuItem dotsItem = new JMenuItem("Dots"); dotsItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { frame.getContentPane().removeAll(); BufferedImage img2 = new BufferedImage(660,500,BufferedImage.TYPE_INT_ARGB); BufferedImage attImage = new BufferedImage(100,500,BufferedImage.TYPE_INT_ARGB); final Panel panel = new Panel(img2,points,2); final Attributes attPanel = new Attributes(attImage,panel); panel.type=2; JLabel label2 = new JLabel("Dots"); frame.getContentPane().add(panel,BorderLayout.CENTER); frame.getContentPane().add(label2,BorderLayout.SOUTH); frame.getContentPane().add(attPanel,BorderLayout.EAST); frame.pack(); } }); fileMenu.add(saveItem); fileMenu.add(exitItem); typeMenu.add(paintItem); typeMenu.add(dotsItem); typeMenu.add(fireworksItem); JMenuBar menuBar = new JMenuBar(); menuBar.add(fileMenu); menuBar.add(typeMenu); frame.setJMenuBar(menuBar); frame.pack(); frame.setVisible(true); } Color color; int colorInt; public static Point findColor(BufferedImage image) { int width = image.getWidth(); int height = image.getHeight(); int array[][]= new int[2][10000]; int counter =0; for (int i=0;i=-15859712) { array[0][counter]=i; array[1][counter]=j; //System.out.println("changed"); //System.out.println(counter); counter++; } } } Point point; if(counter !=0) { int sumI = array[0][0]; int sumJ = array[1][0]; for (int j=0;j<9999;j++) { sumI = sumI + array[0][j+1]; sumJ = sumJ + array[1][j+1]; } int averageX = sumI/counter; int averageY = sumJ/counter; point = new Point(averageX,averageY); } else { point = new Point (-1,-1); System.out.println("point"); } return point; } } class Panel extends JPanel { static private final Color outline_color = Color.BLACK; private final int width, max_x; private final int height, max_y; BufferedImage image; Point points[]; private Graphics2D drawing; int type=0; ActionListener taskPerformerTemp = new ActionListener() { public void actionPerformed(ActionEvent event) { } }; Timer timerTemp= new Timer(0,taskPerformerTemp); public Panel(final BufferedImage image, Point points[], int type) { this.image = image; this.points = points; drawing = image.createGraphics(); width = image.getWidth(); height = image.getHeight(); Dimension size = new Dimension(width,height); setMinimumSize(size); setMaximumSize(size); setPreferredSize(size); max_x = width-1; max_y = height-1; if(type==0) drawLaser(); if(type==1) drawFireworks(); if(type==2) drawDots(); } public void drawLaser() { timerTemp.stop(); drawing.setColor(Color.WHITE); drawing.fillRect(0,0,width,height); drawing.setColor(Attributes.drawingColor); drawing.setStroke(Attributes.drawingStroke); for (int i=0; i499) { x = xInit; y = yInit; } Ellipse2D.Double fire = new Ellipse2D.Double(x,y,1,1); drawing.draw(fire); drawing.setColor(Attributes.drawingColor); repaint(); } } Attributes.k++; } }; Timer timer = new Timer(500,taskPerformer); timerTemp=timer; timer.restart(); } public void fireworks(final Point point) { int t=0; while(t!=10) { double x = point.getX(); double y = point.getY(); Ellipse2D.Double fire[] = new Ellipse2D.Double[10]; for(int i=0;i