WELCOME

WELCOME TO TECH-VILLA.

SEARCH YOUR TECHNICAL STUFF

OR

BROWSE THROUGH LABELS IN SIDEBAR

HAPPY BLOGGING.

Sunday, December 20, 2009

Screen Capture in java

This project captures the screen and compress the captured image and then multicast it, so that all the machines connected with that multicast address can receive the captured screen.



Code :

/////////////////////ImageCanvas.java/////////////////////

import com.sun.image.codec..*;
import java.awt.image.BufferedImage;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.*;
import java.awt.*;
import java.net.*;
import java.io.*;
import javax.imageio.ImageIO;
import java.awt.geom.*;

public class ImageCanvas implements Runnable
{
public Robot robo;
byte [] dataone;
int count=0;
public BufferedImage myImage;
public InetAddress multicastAddress;
public MulticastSocket socket;
public static void main(String args[])
{
try
{
ImageCanvas img=new ImageCanvas();
new Thread(img).start();
}
catch(Exception e)
{
System.out.println("Errr in Imgcanvas "+e);
}
}
public void start()
{
}
public ImageCanvas()
{
try
{
robo=new Robot();
}
catch(Exception e)
{
System.out.println("Errr in Imgcanvas cons
"+e);
}
}
public void run()
{
for (;;)
{
try
{
myImage=robo.createScreenCapture(new
Rectangle(0,0,800,800));
//myImage=robo.createScreenCapture(new
Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
int x1=155;int y1=150;int x2=205;int
y2=185;
int red = 255;
int green = 0;
int blue = 0;
int transparency = 100;
// do the highlighting
Graphics graphics =
myImage.getGraphics();
Color color = new Color(red, green,
blue,255 * transparency/100);
graphics.setColor(color);
graphics.drawString("Screen Capture " +
new java.util.Date(),50, myImage.getHeight() - 10);
int thumbWidth=500,thumbHeight=500;
double thumbRatio = (double)thumbWidth
/
(double)thumbHeight;
int imageWidth =
myImage.getWidth(null);
int imageHeight =
myImage.getHeight(null);
double imageRatio = (double)imageWidth
/
(double)imageHeight;
if (thumbRatio < imageRatio) {
thumbHeight = (int)(thumbWidth
/
imageRatio);
} else {
thumbWidth = (int)(thumbHeight
*
imageRatio);
}
// draw original image to thumbnail
image
object and
// scale it to the new size on-the-fly

BufferedImage thumbImage = new BufferedImage(thumbWidth,thumbHeight,
BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D =
thumbImage.createGraphics();

graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHint
s.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(myImage, 0, 0,
thumbWidth, thumbHeight, null);
BufferedOutputStream out = new
BufferedOutputStream(new FileOutputStream("screencapture.jpg"));
JPEGImageEncoder encoder =
JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param =
encoder.getDefaultJPEGEncodeParam(thumbImage);
int quality = Integer.parseInt("75");
quality = Math.max(0, Math.min(quality,
100));
param.setQuality((float)quality /
100.0f,
false);
encoder.setJPEGEncodeParam(param);
encoder.encode(thumbImage);
File file=new
File("screencapture.jpg");
RandomAccessFile f=new
RandomAccessFile(file,"r");
System.out.println(" transmit len=
"+f.length());
byte [] data = new
byte[(int)f.length()];
if(count++==0)
dataone=new byte[data.length];
f.read(data);
if(dataone.length!=data.length)
{

System.out.println("Transmitting");
multicastAddress =
InetAddress.getByName("224.5.6.7");
socket = new
MulticastSocket(6789);
DatagramPacket sendPacket=new
DatagramPacket(data,data.length,multicastAddress,6789);
socket.send(sendPacket);
}
dataone=data;
f.close();
file.delete();
}
catch(Exception e)
{
System.out.println("Errr in Imgcanvas
thread "+e);
}
}
}
}// End of ImageCanvas.java

////////////////////////////////////Test.java/////////////////
import java.awt.*;
import javax.swing.*;
import java.awt.image.*;
import java.net.*;
import com.sun.image.codec.jpeg.*;
import java.awt.image.BufferedImage;
import java.awt.Graphics2D;
import java.awt.RenderingHints;

class screenCapture extends Canvas implements Runnable
{
Image image=null;
Robot robo =null;
byte buffer[]=new byte[60000];
static MediaTracker tracker;

public screenCapture ()
{
}
public void run()
{
for(; ;)
{
try
{
InetAddress
mdd=InetAddress.getByName("224.5.6.7");
MulticastSocket sck=new
MulticastSocket(6789);
sck.joinGroup(mdd);
DatagramPacket pck=new
DatagramPacket(buffer,buffer.length);
sck.receive(pck);
image =
Toolkit.getDefaultToolkit().createImage(pck.getData());

image=image.getScaledInstance(this.getWidth(),this.getHeight(),2);
tracker = new MediaTracker(this);
tracker.addImage(image,0);
}
catch(Exception e)
System.out.println("Errr in test "+e);
}
try
{
tracker.waitForID(0);
}
catch(Exception e)
{
System.out.println("Errr in tracker
"+e);
}
repaint();
} // end of for loop
}
public void paint (Graphics g)
{
try
{
g.drawImage(image,0,0,this);
}
catch(Exception e){System.out.println("Errr in paint
"+e);}
return;
}
public void update(Graphics g)
{
paint(g);
}

}

public class Test
{
public static void main(String args[])
{
JFrame fram = new JFrame();
screenCapture capture = new screenCapture();
fram.getContentPane().add(capture);
fram.setSize(510,520);
fram.setLocation(600,200);
fram.show();
new Thread(capture).start();
}
} //end of Test.java

No comments:

Post a Comment