`
zpball
  • 浏览: 914671 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

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

   
package com.qiu.util;

    import java.io.*;

    import java.net.*;

    import javax.swing.*;

    import java.awt.*;

    import java.awt.event.*;

    import java.awt.image.*;

    import javax.imageio.*;

    import java.io.*;

    /**@Author Qiu_BaiChao

    *一个简单的屏幕抓图

    *

    **/

    public class ScreenCapture {

    //test main

    public static void main(String[] args) throws Exception{

    String userdir = System.getProperty("user.dir");

    File tempFile = new File("d:","temp.png");

    ScreenCapture capture = ScreenCapture.getInstance();

    capture.captureImage();

    JFrame frame = new JFrame();

    JPanel panel = new JPanel();

    panel.setLayout(new BorderLayout());

    JLabel imagebox = new JLabel();

    panel.add(BorderLayout.CENTER,imagebox);

    imagebox.setIcon(capture.getPickedIcon());

    capture.saveToFile(tempFile);

    capture.captureImage();

    imagebox.setIcon(capture.getPickedIcon());

    frame.setContentPane(panel);

    frame.setSize(400,300);

    frame.show();

    System.out.println("Over");

    }

    private ScreenCapture() {

    try{

    robot = new Robot();

    }

    catch(AWTException e) {

    System.err.println("Internal Error: " + e);

    e.printStackTrace();

    }

    JPanel cp = (JPanel)dialog.getContentPane();

    cp.setLayout(new BorderLayout());

    labFullScreenImage.addMouseListener(new MouseAdapter() {

    public void mouseReleased(MouseEvent evn) {

    isFirstPoint = true;

    pickedImage = fullScreenImage.getSubimage(recX,recY,recW,recH);

    dialog.setVisible(false);

    }

    });

    labFullScreenImage.addMouseMotionListener(new MouseMotionAdapter() {

    public void mouseDragged(MouseEvent evn) {

    if(isFirstPoint) {

    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;

    labFullScreenImage.drawRectangle(recX,recY,recW,recH);

    }

    }

    public void mouseMoved(MouseEvent e) {

    labFullScreenImage.drawCross(e.getX(),e.getY());

    }

    });

    cp.add(BorderLayout.CENTER,labFullScreenImage);

    dialog.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));

    dialog.setAlwaysOnTop(true);

    dialog.setMaximumSize(

    Toolkit.getDefaultToolkit().getScreenSize());

    dialog.setUndecorated(true);

    dialog.setSize(dialog.getMaximumSize());

    dialog.setModal(true);

    }

    //Singleton Pattern

    public static ScreenCapture getInstance() {

    return defaultCapturer;

    }

    /**捕捉全屏慕*/

    public Icon captureFullScreen() {
fullScreenImage = robot.createScreenCapture(new Rectangle(

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

    ImageIcon icon = new ImageIcon(fullScreenImage);

    return icon;

    }

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

    */

    public void captureImage() {

    fullScreenImage = robot.createScreenCapture(new Rectangle(

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

    ImageIcon icon = new ImageIcon(fullScreenImage);

    labFullScreenImage.setIcon(icon);

    dialog.setVisible(true);

    }

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

    public BufferedImage getPickedImage() {

    return pickedImage;

    }

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

    public ImageIcon getPickedIcon() {

    return new ImageIcon(getPickedImage());

    }

    /**储存为一个文件,为PNG格式

    *@deprecated

    *replaced by saveAsPNG(File file)

    **/

    @Deprecated

    public void saveToFile(File file) throws IOException{

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

    }

    /**储存为一个文件,为PNG格式*/

    public void saveAsPNG(File file) throws IOException {

    ImageIO.write(getPickedImage(),"png",file);

    }

    /**储存为一个JPEG格式图像文件*/

    public void saveAsJPEG(File file) throws IOException {

    ImageIO.write(getPickedImage(),"JPEG",file);

    }

    /**写入一个OutputStream*/

    public void write(OutputStream out) throws IOException{

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

    }

    //singleton design pattern

    private static ScreenCapture defaultCapturer = new ScreenCapture();

    private int x1,y1,x2,y2;

    private int recX,recY,recH,recW; //截取的图像

    private boolean isFirstPoint = true;

    private BackgroundImage labFullScreenImage = new BackgroundImage();

    private Robot robot;

    private BufferedImage fullScreenImage;

    private BufferedImage pickedImage;

    private String defaultImageFormater = "png";

    private JDialog dialog = new JDialog();

    }

    /**显示图片的Label*/

    class BackgroundImage extends JLabel{

    public void paintComponent(Graphics g) {

    super.paintComponent(g);

    g.drawRect(x,y,w,h);

    String area = Integer.toString(w)+" * "+ Integer.toString(h);

    g.drawString(area,x+(int)w/2-15,y+(int)h/2);

    g.drawLine(lineX,0,lineX,getHeight());

    g.drawLine(0,lineY,getWidth(),lineY);

    }

    public void drawRectangle(int x,int y,int width,int height) {

    this.x = x;

    this.y = y;

    h = height;

    w = width;

    repaint();

    }

    public void drawCross(int x,int y) {

    lineX = x;

    lineY = y;

    repaint();

    }

    int lineX,lineY;

    int x,y,h,w;

    }
 

 


http://www.hackbase.com/tech/2010-08-03/60958_2.html
分享到:
评论

相关推荐

    远程桌面控制、抓图SreenServer

    远程桌面控制和屏幕抓图是IT领域中两个重要的技术,它们在系统管理、技术支持和协作等方面发挥着关键作用。SreenServer,作为一个这样的工具,它提供了远程访问和屏幕捕获的功能,使得用户能够轻松地从一个地方操控...

    一个简单的用JAVA实现的屏幕抓图(源代码)

    根据给定的文件信息,我们可以总结出以下关于使用Java实现屏幕截图的重要知识点: ### Java屏幕抓图技术概览 在Java中,实现屏幕抓图主要依赖于`java.awt.Robot`类,它提供了屏幕捕获的功能。通过创建`Robot`实例...

    JAVA屏幕抓图(源码)

    在Java编程语言中,实现屏幕抓图功能是一项常见的任务,特别是在开发桌面应用或者需要进行自动化测试时。这个项目提供了一段源码,模仿了QQ截图的功能,允许用户通过拖动鼠标来选择屏幕上的任何区域进行截图,并且...

    VC++ 远程桌面控制、抓图源程序.7z

    在IT领域,远程桌面控制和屏幕抓图是两个非常重要的技术。VC++,全称Visual C++,是Microsoft开发的一款强大的C++编程环境,广泛用于创建桌面应用、系统级工具和游戏等。在这个"VC++ 远程桌面控制、抓图源程序"中,...

    java 屏幕抓图 源代码

    压缩包中的"ScreenCapture"可能是一个Java源文件,包含了实现屏幕抓图功能的主要代码。通常,它会包含一个主类,其中包含创建Robot对象、截取屏幕并保存或显示截图的逻辑。 8. **学习与实践**: 对于初学者来说,...

    用VB实现屏幕抓图

    那么我们如何用VB实现屏幕抓图呢?本资源包含的源程序代码将为您解答。 本资源压缩包内包含实现此功能的所有代码(不含控件),简单修改即可适应您的要求。 本实例不仅有抓图功能,而且支持将抓取的...

    VC远程桌面控制、抓图源程序

    本文将深入探讨使用VC(Visual C++)进行远程桌面控制和屏幕抓图的源码实现。 首先,VC++是Microsoft开发的一款集成开发环境(IDE),它基于C++编程语言,支持创建Windows应用程序。在远程桌面控制方面,VC++可以...

    MFC实现屏幕抓图效果,新手们很具有参考价值。

    在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 库来实现屏幕抓图功能,这对于初学者来说极具价值。MFC是Microsoft提供的一种C++类库,它简化了Windows应用程序的开发,提供了丰富的控件和API...

    抓图程序 JAVA版 用JAVA写的抓图程序

    【标题】:“抓图程序 JAVA版 用JAVA写的抓图程序” 这个项目是基于Java语言开发的一款抓图工具,主要用于从网页中批量抓取图片并保存到本地形成一个文件夹。在网页抓取领域,这样的工具非常实用,尤其是在处理包含...

    Winform中实现屏幕抓图示例代码.zip

    在Windows Forms(Winform)应用开发中,有时我们需要实现屏幕抓图功能,比如为了记录用户操作、创建教学视频或者进行自动化测试。这个压缩包“Winform中实现屏幕抓图示例代码.zip”提供了在Winform环境下实现屏幕...

    VC++ 远程桌面控制、抓图源程序

    总的来说,通过VC++实现远程桌面控制和屏幕抓图涉及到Windows API的使用,网络编程,以及图形处理技术。理解这些知识点,开发者可以创建出强大的系统管理和支持工具。而带有详细注释的源代码是学习和实践这些技术的...

    archive_VC++ 远程桌面控制、抓图源程序.zip.zip

    在本项目中,VC++被用作编写远程桌面控制和屏幕抓图软件的工具。 远程桌面控制允许用户通过网络远程操作另一台计算机,实现如同坐在那台计算机前一样的控制体验。这种功能的核心是网络通信技术,通常采用TCP/IP协议...

    bmp.zip_屏幕 抓图_屏幕抓图_抓图

    在这个屏幕抓图程序中,开发者可能利用了Windows API中的相关函数,比如`GetWindowDC`和`GetDesktopWindow`来获取屏幕或窗口的设备上下文(Device Context),然后调用`BitBlt`或`StretchBlt`进行位图复制,实现屏幕...

    屏幕抓图程序

    在屏幕抓图中,我们需要利用`java.awt.Robot`类,它能够模拟用户的键盘和鼠标操作,包括捕获屏幕图像。以下是一个简单的屏幕抓图示例: ```java import java.awt.*; import java.io.*; public class Screenshot { ...

    屏幕抓图.zip

    在本文中,我们将深入探讨如何使用C#编程语言来实现屏幕抓图功能,这将对初学者理解Windows绘图原理非常有帮助。首先,我们来看看标题"屏幕抓图.zip",这表明我们要讨论的是一个与捕获计算机屏幕图像相关的项目。在...

    C#实现屏幕抓图工程文件源代码

    在本文中,我们将深入探讨如何使用C#编程语言来实现屏幕抓图功能。这个主题源自一个名为"C#实现屏幕抓图工程文件源代码"的项目,该项目包含了一个可运行的工程文件,适用于Visual Studio 2008开发环境。源代码可用于...

    c#屏幕抓图

    本文将详细介绍如何使用纯代码的方式在C#中实现屏幕抓图的功能。 #### 二、关键技术点解析 ##### 2.1 关键技术介绍 在C#中实现屏幕抓图主要依赖于以下关键技术: - **GDI+(Graphics Device Interface Plus)**...

    VisualC 实效编程 23 屏幕抓图

    VisualC 实效编程 23 屏幕抓图VisualC 实效编程 23 屏幕抓图VisualC 实效编程 23 屏幕抓图VisualC 实效编程 23 屏幕抓图VisualC 实效编程 23 屏幕抓图VisualC 实效编程 23 屏幕抓图VisualC 实效编程 23 屏幕抓图...

    Java对接大华摄像头进行抓图和录像的demo

    在Java后端开发中,对接大华摄像头进行远程抓图和录像是一项常见的任务,尤其在监控系统、视频会议或者安全防护等领域。这个"Java对接大华摄像头进行抓图和录像的demo"提供了一个实例,帮助开发者理解如何实现这一...

Global site tag (gtag.js) - Google Analytics