ChinaUnix首页 > 精华文章 > Java > 正文

[保留] 冒着生命危险,从别的地方给兄弟们嫖了一段辑屏的代码过来


http://www.chinaunix.net 作者:jamesbang2003  发表于:2009-04-17 10:56:13
发表评论】 【查看原文】 【Java讨论区】【关闭

import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

/*******************************************************************
 * 该JavaBean可以直接在其他Java应用程序中调用,实现屏幕的"拍照"
 * This JavaBean is used to snapshot the GUI in a 
 * Java application! You can embeded
 * it in to your java application source code, and us
 * it to snapshot the right GUI of the application
 * @see javax.ImageIO
 * @author liluqun ([email]liluqun@263.net[/email])
 * @version 1.0
 *
 *****************************************************/

public class GuiCamera
{  
    private String fileName; //文件的前缀
    private String defaultName = "GuiCamera";
    static int serialNum=0;
    private String imageFormat; //图像文件的格式
    private String defaultImageFormat="png";
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();

    /****************************************************************
     * 默认的文件前缀为GuiCamera,文件格式为PNG格式
     * The default construct will use the default 
     * Image file surname "GuiCamera", 
     * and default image format "png"
     ****************************************************************/
    public GuiCamera() {
      fileName = defaultName;
      imageFormat=defaultImageFormat;
    
    }

    /****************************************************************
     * @param s the surname of the snapshot file
     * @param format the format of the  image file, 
     * it can be "jpg" or "png"
     * 本构造支持JPG和PNG文件的存储
     ****************************************************************/
    public GuiCamera(String s,String format) {
    
      fileName = s;
      imageFormat=format;
    }
    
    /****************************************************************
     * 对屏幕进行拍照
     * snapShot the Gui once
     ****************************************************************/
    public void snapShot() {
    
      try {
      //拷贝屏幕到一个BufferedImage对象screenshot
        BufferedImage screenshot = (new Robot()).createScreenCapture(new
            Rectangle(0, 0, (int) d.getWidth(), (int) d.getHeight()));
        serialNum++;
        //根据文件前缀变量和文件格式变量,自动生成文件名
        String name=fileName+String.valueOf(serialNum)+"."+imageFormat;
        File f = new File(name);
        System.out.print("Save File "+name);
      //将screenshot对象写入图像文件
        ImageIO.write(screenshot, imageFormat, f);
        System.out.print("..Finished!\n");
      }
      catch (Exception ex) {
        System.out.println(ex);
      }
    }

    public static void main(String[] args)
    {
        GuiCamera cam= new GuiCamera("d:\\Hello", "png");//

        cam.snapShot();
    }
}



 aixy 回复于:2006-06-09 17:33:10

Good


 scenery_86 回复于:2006-06-09 17:37:28

顶一个


 perryhg 回复于:2006-06-09 21:51:46

这个Robot类功能很强的说,据说可以编程让鼠标自己移动呢,鼓励一下楼主!不过截个屏也不用冒生命危险吧?

[ 本帖最后由 perryhg 于 2006-6-9 21:54 编辑 ]


 xxjoyjn 回复于:2006-06-09 22:26:31

这个代码比 print screen要强一点:mrgreen:


 夜夜呆 回复于:2006-06-10 14:14:02

呵呵 好咚咚....!~
 感谢008 ....


 dxnian 回复于:2006-06-10 14:17:09

好东东,顶下。呵呵


 小粥 回复于:2006-06-10 14:17:50

up


 追梦南风 回复于:2006-06-10 17:49:39

顶,好东西!我是个新手!


 carinnar 回复于:2006-06-11 09:05:27

很不错!谢谢!


 黑眼豆豆 回复于:2006-06-12 13:04:11

very good


 tree135311 回复于:2006-06-14 21:57:18

强    顶一下


 liouville_1984 回复于:2006-08-24 08:18:18

好东东,顶


 lauchee 回复于:2006-12-27 14:41:02

很棒,真是个牛人啊.


 teststar 回复于:2007-06-03 11:40:41

支持一个。


 houyue 回复于:2007-06-03 14:05:35

好东东。顶一下啦。


 ruknow 回复于:2007-06-03 18:14:07

我想在snapShot()方法中加个while(true) {...}, 再放到哪个 LM 的机器上跑一跑:D:D


 shuben2000 回复于:2007-12-13 11:48:25

谢谢!


 给个理由先 回复于:2007-12-14 22:57:32

BufferedImage screenshot = (new Robot()).createScreenCapture(new
            Rectangle(0, 0, (int) d.getWidth(), (int) d.getHeight()));

就调用了一个方法,没看出有啥特别:em14:


 realmon 回复于:2007-12-15 09:06:35

和print screen不一样么?


 saft_len 回复于:2008-01-04 15:40:36

好东西,收藏了.
慢慢研究.
谢谢楼主啊.


 fecasmoy123 回复于:2008-01-05 02:24:50

有创意


 flyingnn 回复于:2008-01-06 23:31:40

新手来D,好好学习.


 keer2345 回复于:2009-04-15 17:36:02

佩服,实在是佩服。
如果应用在web上的话,可以加上延时。
一般运行时立即截图的话,看到的也只是人家的浏览器页面而已。


 starxing 回复于:2009-04-15 20:15:25

引用:原帖由 keer2345 于 2009-4-15 17:36 发表 [url=http://bbs2.chinaunix.net/redirect.php?goto=findpost&pid=10393470&ptid=770968]
佩服,实在是佩服。
如果应用在web上的话,可以加上延时。
一般运行时立即截图的话,看到的也只是人家的浏览器页面而已。 


这个不能用于WEB应用上吧,


 qany520 回复于:2009-04-15 21:36:28

:m01: 可以,


 hdc1112 回复于:2009-04-15 23:54:58

我以前就用这个实现了一个网页版的远程桌面显示~ 不过很挫的说~~ :mrgreen:


 caojiqun 回复于:2009-04-16 22:57:16

请比较下LZ的贴的代码和这个帖子有何差别!
http://www.chinaitpower.com/A200508/2005-08-05/183492.html


 hdc1112 回复于:2009-04-17 10:56:13

这个东西实际上如果要做成浏览器版的桌面显示的话还有很长的路要走。
如果是单纯刷屏的话,闪烁太严重。
这种东西不是这么简单的

而且robot类的简单应用不算什么




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=770968
转载请注明作者名及原文出处