谷云秒收录

首页 > 秒收录 > 文章资讯

JAVA实现屏幕抓图远程桌面控制

主要使用的是java.util.Robot类来捕获屏幕,可以实现对屏幕一个矩形区域的捕获,通过这个类,我们也可以实现一个远程桌面控制的程序。

包裹。com。邱。util

导入Java。io。*;

导入Java。净。*;

导入javax。摇摆。*;

导入Java。啊。*;

导入Java。啊。事件。*;

导入Java。啊。图像。*;

导入javax。imageio。*;

导入Java。io。*;

/* * @作者丘_百超

*一个简单的屏幕抓图

*

**/

公共类ScreenCapture {

//测试主菜单

公共静态void main(字符串[]参数)引发异常(

字符串用户目录=系统。getproperty(' user。dir’);

文件tempFile=新文件(“d:”,“temp。png ');

屏幕捕获捕获=屏幕捕获。getinstance();

捕捉。captureimage();

JFrame frame=new JFrame();

JPanel panel=new JPanel();

panel.setLayout(新的BordrayOut());

JLabel imagebox=new JLabel();

面板。添加(Bordlayout .CENTER,imagebox);

imagebox。seticon(捕获。getpicedicon());

捕捉。savet file(TempFile);

捕捉。captureimage();

imagebox。seticon(捕获。getpicedicon());

frame.setContentPane(面板);

frame.setSize(400,300);

框架。show();

系统。出去。println(' Over ');

}

私有屏幕捕获(){ 0

尝试{

机器人=新机器人();

}

catch(AWTexception e){ 0

System.err.println('内部错误: ' e);

e。print stack trace();

}

JPanel CP=(JPanel)对话框。getcontent pane();

cp.setLayout(新的border layout());

labfulscreenimage。addmouselistener(新的MouseAdapter(){ 0

公共void MouseReleased(MouseEvent evn){ 0

isFirstPoint=真

pickedImage=完整的屏幕图像。getsubimage(recX、recY、recW、RecH);

对话。set visible(false);

}

});

labfulscreenimage。addmousemotionlistener(新的MouseMotionAdapter(){ 0

公共void MouseDrawed(MouseEvent evn){ 0

if(IsFirstPoint){ 0

x1=evn。GetX();

y1=evn。GetY();

isFirstPoint=false

}

else {

x2=evn。GetX();

y2=evn。GetY();

int maxX=Math.max(x1,x2);

int maxY=Math.max(y1,y2);

int minX=Math.min(x1,x2);

int minY=Math.min(y1,y2);

recX=minX

recY=minY

recW=MaxX-MinX;

recH=MaxY-MinY;

labfulscreenimage。绘制矩形(recX、recY、recW、RecH);

}

}

公共void Mousemoved(MouseEvent e){ 0

labfulscreenimage。画十字(e . GetX()、e . GetY());

}

});

比较添加(Bordlayout .中心,labfulscreenimage);

对话。设置光标(光标。getpredefinedcursor(光标.十字准线_光标));

对话。setalwaysontop(真);

dialog.setMaximumSize(

Toolkit.getDefaultToolkit().getScreenSize());

对话。setundeclared(true);

对话。setsize(对话框。getmaximumsize());

对话。setModal(true);

}

//单例模式

公共静态屏幕捕获getInstance(){ 0

返回defaultCapturer

}

/**捕捉全屏慕*/

公共图标捕获全屏(){ 0

完整屏幕图像=机器人。创建屏幕捕获(新矩形(

Toolkit.getDefaultToolkit().getScreenSize()));

ImageIcon图标=新的ImageIcon(全屏图像);

返回图标;

}

/**捕捉屏幕的一个矫形区域

*/

public void captureImage(){ 0

完整屏幕图像=机器人。创建屏幕捕获(新矩形(

Toolkit.getDefaultToolkit().getScreenSize()));

ImageIcon图标=新的ImageIcon(全屏图像);

labFullScreenImage.setIcon(图标);

对话。set visible(true);

}

/**得到捕捉后的BufferedImage*/

public BufferedImage getPickedImage(){ 0

返回pickedImage

}

/**得到捕捉后的图标*/

public ImageIcon GetPickedicon(){ 0

返回新的ImageIcon(getPickedImage());

}

/**储存为一个文件,为巴布亚新几内亚格式

* @已弃用

*替换为保存文件

**/

@已弃用

公共void saveToFile(文件文件)引发IOException{

ImageIO.write(getPickedImage(),defaultImageFormater,file);

}

/**储存为一个文件,为巴布亚新几内亚格式*/

公共void saveAsPNG(文件文件)引发IOException {

ImageIO.write(getPickedImage(),' png ',文件);

}

/**储存为一个联合图像专家组格式图像文件*/

公共void saveAsJPEG(文件文件)引发IOException {

ImageIO.write(getPickedImage(),' JPEG ',文件);

}

/**写入一个输出流*/

公共无效写入(输出流输出)引发IOException()

ImageIO.write(getPickedImage(),defaultImageFormater,out);

}

//单例设计模式

私有静态屏幕捕获defaultCapturer=new ScreenCapture();

private int x1,y1,x2,y2;