前几天在chinajavaworld上看到过一个类似的东东!而且捕捉之后用socket来传输!不过今天chinajavaworld不能上!先把两个主要的类给你你自己看看吧!
package simage;//自定义的图像序列化包
import java.awt.*;
import java.awt.image.*;
import java.beans.*;
import java.io.*;
public class MyImage extends Canvas implements java.io.Serializable { private transient Image image;
private int width;
private int height;
private Dimension mySize = new Dimension(); public MyImage() {
image = null;
} public MyImage(File ImageFile) {
this();
setImage(ImageFile);
}
//////////
//////////
public MyImage(Image img)
{
try {
image = loadImage(img);
}
catch (InterruptedException e) {
image = null;
}
if(image!=null)
{ mySize = new Dimension(image.getWidth(this), image.getHeight(this));}
} private Image loadImage(Image img) throws InterruptedException {
Image im=img;
MediaTracker mt = new MediaTracker(this);
mt.addImage (im,0);
mt.waitForAll();
if (mt.isErrorAny()) {
return null;
}
else {
return im;
}
}//////////
////////// public Dimension getImageSize() { return mySize; }//返回图像大小
public Image getImage(){return image;}//返回图像(无论是网络传输的还是本地读的)//自定义序列化写图像
private void writeObject(ObjectOutputStream stream) throws java.io.IOException {
stream.defaultWriteObject(); // 写 non-transient, non-static 数据
PixelGrabber grabber = new PixelGrabber(image, 0,0, -1, -1, true); try {
grabber.grabPixels();
}
catch (InterruptedException e) { } Object pix = grabber.getPixels();
Dimension dim = new Dimension(image.getWidth(this), image.getHeight(this));
stream.writeObject(dim);
stream.writeObject(pix);
}
//自定义序列化读图像
private void readObject(ObjectInputStream stream) throws java.io.IOException {
try {
stream.defaultReadObject(); // 读 non-transient, non-static 数据
Dimension dim = (Dimension)stream.readObject();
Object img = stream.readObject();
int [] pix = (int [])img;
image = createImage(new MemoryImageSource(dim.width, dim.height, pix, 0, dim.width));
}
catch (ClassNotFoundException e) {
throw new java.io.IOException();
}
} private void setImage(File file) {
try {
image = readImage(file);
}
catch (InterruptedException e) {
image = null;
}
if (image != null) {
mySize = new Dimension(image.getWidth(this), image.getHeight(this));
}
}
private Image readImage(File file) throws InterruptedException {
return readImage(file.toString());
}
private Image readImage(String name) throws InterruptedException {
Image im;
MediaTracker mt = new MediaTracker(this);
Toolkit toolkit = Toolkit.getDefaultToolkit();
im = toolkit.getImage(name);
mt.addImage (im,0);
mt.waitForAll();
if (mt.isErrorAny()) {
return null;
}
else {
return im;
}
}
}
package simage;//自定义的图像序列化包
import java.awt.*;
import java.awt.image.*;
import java.beans.*;
import java.io.*;
public class MyImage extends Canvas implements java.io.Serializable { private transient Image image;
private int width;
private int height;
private Dimension mySize = new Dimension(); public MyImage() {
image = null;
} public MyImage(File ImageFile) {
this();
setImage(ImageFile);
}
//////////
//////////
public MyImage(Image img)
{
try {
image = loadImage(img);
}
catch (InterruptedException e) {
image = null;
}
if(image!=null)
{ mySize = new Dimension(image.getWidth(this), image.getHeight(this));}
} private Image loadImage(Image img) throws InterruptedException {
Image im=img;
MediaTracker mt = new MediaTracker(this);
mt.addImage (im,0);
mt.waitForAll();
if (mt.isErrorAny()) {
return null;
}
else {
return im;
}
}//////////
////////// public Dimension getImageSize() { return mySize; }//返回图像大小
public Image getImage(){return image;}//返回图像(无论是网络传输的还是本地读的)//自定义序列化写图像
private void writeObject(ObjectOutputStream stream) throws java.io.IOException {
stream.defaultWriteObject(); // 写 non-transient, non-static 数据
PixelGrabber grabber = new PixelGrabber(image, 0,0, -1, -1, true); try {
grabber.grabPixels();
}
catch (InterruptedException e) { } Object pix = grabber.getPixels();
Dimension dim = new Dimension(image.getWidth(this), image.getHeight(this));
stream.writeObject(dim);
stream.writeObject(pix);
}
//自定义序列化读图像
private void readObject(ObjectInputStream stream) throws java.io.IOException {
try {
stream.defaultReadObject(); // 读 non-transient, non-static 数据
Dimension dim = (Dimension)stream.readObject();
Object img = stream.readObject();
int [] pix = (int [])img;
image = createImage(new MemoryImageSource(dim.width, dim.height, pix, 0, dim.width));
}
catch (ClassNotFoundException e) {
throw new java.io.IOException();
}
} private void setImage(File file) {
try {
image = readImage(file);
}
catch (InterruptedException e) {
image = null;
}
if (image != null) {
mySize = new Dimension(image.getWidth(this), image.getHeight(this));
}
}
private Image readImage(File file) throws InterruptedException {
return readImage(file.toString());
}
private Image readImage(String name) throws InterruptedException {
Image im;
MediaTracker mt = new MediaTracker(this);
Toolkit toolkit = Toolkit.getDefaultToolkit();
im = toolkit.getImage(name);
mt.addImage (im,0);
mt.waitForAll();
if (mt.isErrorAny()) {
return null;
}
else {
return im;
}
}
}
import java.awt.image.*;
import javax.swing.event.*;
import java.io.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.awt.*;
import java.net.*;
import simage.*;
import com.sun.image.codec.jpeg.*;
import java.util.zip.*;
import java.net.Socket;
public class Capture extends JFrame {
public static Image img1= null;
int x=0,y=0;
Dimension screenDims =Toolkit.getDefaultToolkit().getScreenSize();
Robot r = null;
JButton but; GZIPSocket sst1;
public Capture()
{
getContentPane().setLayout(new BorderLayout());
try { r = new Robot(); }
catch(Exception e) {} but = new JButton("Capture");
but.setBounds(10,10,100,25);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
but.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
frequency fy=new frequency();
fy.frequency1(sst1);
Thread threadfy=new Thread(fy);
threadfy.start();
}
} );//but event is end; getContentPane().add(but,BorderLayout.NORTH);
} /* public void paint(Graphics g) {
super.paint(g);
if (img != null) { //g.drawImage(img,0,0,screenDims.width,screenDims.height,this); Icon icon=new ImageIcon(img);
jlabel.setIcon(icon);
}
}*/ public static void main(String argv[]) {
Capture frame = new Capture();
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
System.exit(0);
}
} );
frame.setBounds(0,0,400,400);
frame.setVisible(true);
}
private void jbInit() throws Exception {
this.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(WindowEvent e) {
this_windowClosing(e);
}
});
} void this_windowClosing(WindowEvent e) {
System.exit(0);
}
}
class frequency extends Capture implements Runnable{
private JScrollPane jScrollPane1 = new JScrollPane();
private JLabel jlabel = new JLabel();
public void frequency1(GZIPSocket st){
sst1=st; } /* public void paint(Graphics g) {
super.paint(g);
if (img1!= null) { g.drawImage(img1,0,0,screenDims.width,screenDims.height,this); // Icon icon=new ImageIcon(img1);
// jlabel.setIcon(icon);
}
}*/
public void run(){
ObjectOutputStream out=null;
BufferedImage img1=null;
MyImage myimage=null; int i=0;
int j=0;
int m=1;
/* try{sst1=new GZIPSocket("127.0.0.1",8080);
}
catch(Exception e){}*/
while(true){
img1=r.createScreenCapture(new Rectangle(0,0,screenDims.width,screenDims.height));
m++;//r.delay(10);
// SaveImage si=new SaveImage(img1,j);
System.out.println(m);
j++;
//this.repaint();try{ sst1=new GZIPSocket("202.203.215.117",8080);
//System.out .println(" connect to server 202.203.215.117 on 8080...1");
GZIPOutputStream gos=(GZIPOutputStream)sst1.getOutputStream(); out=new ObjectOutputStream(gos);
myimage=new MyImage((Image)img1);
//System.out .println("开始向网络中写第 "+(++i)+" 个Image 对象...") ;
// System.out .println("要写的Image 宽="+myimage.getImageSize().width+" 高="+myimage.getImageSize().height ) ;
out.writeObject(myimage);
out.close(); try{
Thread.currentThread().sleep(1);
}catch(Exception e){} } // catch(IOException e2){}
catch(Exception e3){}
}}}class GZIPSocket extends Socket { private InputStream in;
private OutputStream out; public GZIPSocket() {
super();
} public GZIPSocket(String host, int port) throws IOException {
super(host, port); } public InputStream getInputStream() throws IOException {
if (in == null) {
in = new GZIPInputStream(super.getInputStream());
}
return in; } public OutputStream getOutputStream() throws IOException {
if (out == null) {
out = new GZIPOutputStream(super.getOutputStream()); }
return out;
} public synchronized void close() throws IOException { GZIPOutputStream o = (GZIPOutputStream)getOutputStream(); o.flush(); super.close();
}
}