/* * Created on Mar 4, 2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ /** * @author Owner * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ import java.awt.AWTException; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.Robot; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.io.*; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import java.util.Iterator; import javax.imageio.IIOImage; import javax.imageio.ImageIO; import javax.imageio.ImageWriteParam; import javax.imageio.ImageWriter; import javax.imageio.stream.FileImageOutputStream; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.Timer; public class ScreenCapture extends JFrame implements ActionListener { float timesPerSecond = 2f; Timer sTimer; Rectangle screenRect; int imageNum = 0; JPanel main; JButton StartStream,StopStream; JPanel main2,button; JTextField CompressData; JButton Compress; boolean stillRunning; int counter = 0; BufferedImage screenCapture; Iterator iter; ImageWriter writer; ImageWriteParam iwp; Float floatValue = new Float(0.5f); String lineEnd = "\r\n"; String twoHyphens = "--"; String boundary = "*****"; int bytesRead, bytesAvailable, bufferSize; byte[] buffer; int maxBufferSize = 1*1024*1024; URL url; URLConnection urlConn; DataOutputStream printout; DataInputStream input; File file;// = new File("/Volumes/Media/screencapture" + imageNum + ".jpg"); //ImageIO.write(screenCapture, "jpg", file); FileImageOutputStream output;// = new FileImageOutputStream(file); IIOImage image;// = new IIOImage(screenCapture, null, null); // create a buffer of maximum size FileInputStream fileInputStream;// = new FileInputStream(file); Robot rbot; public ScreenCapture() { try { rbot = new Robot(); } catch (AWTException awte) { awte.printStackTrace(); } iter = ImageIO.getImageWritersByFormatName( "JPG" ); writer = (ImageWriter)iter.next(); iwp = writer.getDefaultWriteParam(); iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); iwp.setCompressionQuality(floatValue.floatValue()); sTimer = new Timer((int) (1000/timesPerSecond), this); screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()); //sTimer.start(); StartStream= new JButton("Start Stream"); StopStream = new JButton("Stop Stream"); Compress = new JButton("Compress"); CompressData= new JTextField("" + floatValue); main2 = new JPanel(); main = new JPanel(); main2.setLayout(new FlowLayout(FlowLayout.LEFT,5,5)); main2.add(CompressData); main2.add(Compress); button = new JPanel(); button.setLayout(new FlowLayout(FlowLayout.LEFT,5,5)); StartStream.addActionListener(this); StopStream.addActionListener(this); button.add(StartStream); button.add(StopStream); main.setLayout(new BorderLayout()); main.add(button,BorderLayout.NORTH); main.add(main2,BorderLayout.SOUTH); getContentPane().add(main); show(); } public static void main(String args[]) { ScreenCapture sc = new ScreenCapture(); } void loop(){ while(true){ if(stillRunning == false){ break; } } } public void actionPerformed(ActionEvent e) { System.out.println(e.getSource().toString()); if (e.getSource() == StopStream) { //stillRunning = true; //loop(); sTimer.stop(); System.out.println("Stopping"); } if (e.getSource() == StartStream) { //stillRunning = false; sTimer.start(); System.out.println("Starting"); } if (e.getSource() == Compress) { floatValue = new Float(CompressData.getText()); } if (e.getSource() == sTimer) { try { System.out.println("Here" + counter); counter++; // capture the whole screen screenCapture = rbot.createScreenCapture(screenRect); // Save as JPEG //ImageIO.write(screenCapture, "jpg", file); file = new File("/Volumes/Media/screencapture" + imageNum + ".jpg"); //ImageIO.write(screenCapture, "jpg", file); output = new FileImageOutputStream(file); image = new IIOImage(screenCapture, null, null); // create a buffer of maximum size fileInputStream = new FileInputStream(file); writer.setOutput(output); writer.write(null, image, iwp); url = new URL("http://stage.itp.nyu.edu/~sve204/cgi-bin/ppmfile_upload.cgi"); urlConn = url.openConnection(); urlConn.setDoInput(true); urlConn.setDoOutput(true); urlConn.setUseCaches(false); urlConn.setAllowUserInteraction(false); //urlConn.setRequestProperty("Connection", "Keep-Alive"); urlConn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary); printout = new DataOutputStream (urlConn.getOutputStream ()); printout.writeBytes(twoHyphens + boundary + lineEnd); printout.writeBytes("Content-Disposition: form-data; name=\"file_upload\";" + " filename=\"" + file +"\"" + lineEnd); printout.writeBytes(lineEnd); bytesAvailable = fileInputStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); buffer = new byte[bufferSize]; // read file and write it into form... bytesRead = fileInputStream.read(buffer, 0, bufferSize); while (bytesRead > 0) { printout.write(buffer, 0, bufferSize); bytesAvailable = fileInputStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); bytesRead = fileInputStream.read(buffer, 0, bufferSize); } // send multipart form data necesssary after file data... printout.writeBytes(lineEnd); printout.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); // close streams fileInputStream.close(); //printout.writeBytes(content); printout.flush(); printout.close(); input = new DataInputStream(urlConn.getInputStream ()); String str; while (null != ((str = input.readLine()))) { System.out.println(str); } input.close(); System.runFinalization(); System.gc(); } catch (IOException ioe) { ioe.printStackTrace(); } catch (java.lang.OutOfMemoryError eqeh) { eqeh.printStackTrace(); sTimer.stop(); System.runFinalization(); System.gc(); sTimer.start(); } } } }