News:

GinGly.com - Used by 85,000 Members - SMS Backed up 7,35,000 - Contacts Stored  28,850 !!

Main Menu

Screen Capture and multicast in java - Free Source codes

Started by Kalyan, Mar 23, 2008, 04:17 PM

Previous topic - Next topic

Kalyan

Screen Capture and multicast 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.


ImageCanvas.java

import com.sun.image.codec.jpeg.*;
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 <BR>+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=<BR>+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 <BR>+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<BR>+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