您的位置:首页 > 编程语言 > Java开发

java零碎总结---java实现截图并保存到本地

2013-02-17 20:07 387 查看
java零碎总结---java实现截图并保存到本地

1.java实现截图并保存到本地

提供给大家三个方法,也是整理的,都不是很难,大家需要的看看哈

2.原理都相似

------------------------------------------------------------------

package com.credream.ocr;

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 = "jpg";

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:\\qq", "bmp");//

cam.snapShot();

}

}

-----------------------------------------------------------------------------

第二种方法:

package com.credream.ocr;

import java.awt.AWTException;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.GraphicsDevice;

import java.awt.GraphicsEnvironment;

import java.awt.Rectangle;

import java.awt.Robot;

import java.awt.Toolkit;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.MouseMotionAdapter;

import java.awt.image.BufferedImage;

import java.awt.image.RescaleOp;

import java.io.File;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Date;

import javax.imageio.ImageIO;

import javax.swing.JFrame;

import javax.swing.filechooser.FileSystemView;

/**

* java截屏

* 运行后将当前屏幕截取,并最大化显示。

* 拖拽鼠标,选择自己需要的部分。

* 按Esc键保存图片到桌面,并退出程序。

* 点击右上角(没有可见的按钮),退出程序,不保存图片。

*

* @author JinCeon

*/

public class SnapshotTest {

public static void main(String[] args) {

// 全屏运行

RectD rd = new RectD();

GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment()

.getDefaultScreenDevice();

gd.setFullScreenWindow(rd);

}

}

class RectD extends JFrame {

private static final long serialVersionUID = 1L;

int orgx, orgy, endx, endy;

Dimension d = Toolkit.getDefaultToolkit().getScreenSize();

BufferedImage image;

BufferedImage tempImage;

BufferedImage saveImage;

Graphics g;

@Override

public void paint(Graphics g) {

RescaleOp ro = new RescaleOp(0.8f, 0, null);

tempImage = ro.filter(image, null);

g.drawImage(tempImage, 0, 0, this);

}

public RectD() {

snapshot();

setVisible(true);

// setSize(d);//最大化窗口

setDefaultCloseOperation(EXIT_ON_CLOSE);

this.addMouseListener(new MouseAdapter() {

public void mousePressed(MouseEvent e) {

orgx = e.getX();

orgy = e.getY();

}

});

this.addMouseMotionListener(new MouseMotionAdapter() {

public void mouseDragged(MouseEvent e) {

endx = e.getX();

endy = e.getY();

g = getGraphics();

g.drawImage(tempImage, 0, 0, RectD.this);

int x = Math.min(orgx, endx);

int y = Math.min(orgy, endy);

int width = Math.abs(endx - orgx)+1;

int height = Math.abs(endy - orgy)+1;

// 加上1,防止width或height为0

g.setColor(Color.BLUE);

g.drawRect(x-1, y-1, width+1, height+1);

//减1,加1都是为了防止图片将矩形框覆盖掉

saveImage = image.getSubimage(x, y, width, height);

g.drawImage(saveImage, x, y, RectD.this);

}

});

this.addKeyListener(new KeyAdapter() {

@Override

public void keyReleased(KeyEvent e) {

// 按Esc键退出

if (e.getKeyCode() == 27) {

saveToFile();

System.exit(0);

}

}

});

}

public void saveToFile() {

SimpleDateFormat sdf = new SimpleDateFormat("yyyymmddHHmmss");

String name = sdf.format(new Date());

File path = FileSystemView.getFileSystemView().getHomeDirectory();

String format = "jpg";

File f = new File(path + File.separator + name + "." + format);

try {

ImageIO.write(saveImage, format, f);

} catch (IOException e) {

e.printStackTrace();

}

}

public void snapshot() {

try {

Robot robot = new Robot();

Dimension d = Toolkit.getDefaultToolkit().getScreenSize();

image = robot.createScreenCapture(new Rectangle(0, 0, d.width,

d.height));

} catch (AWTException e) {

e.printStackTrace();

}

}

}

-------------------------------------------------------------

第三种方法:

package com.credream.robotExp;

import java.awt.AWTException;

import java.awt.Rectangle;

import java.awt.Robot;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

public class RobotExp {

public static void main(String[] args) {

try {

Robot robot = new Robot();

BufferedImage bi=robot.createScreenCapture(new Rectangle(900,800)); // 根据指定的

区域(1300,800)抓取屏幕的指定区域

ImageIO.write(bi, "jpg", new File("D:/imageTest.jpg")); //把抓取到的内容写入到一

个jpg文件中

} catch (AWTException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

----------------------------------------------------------------------

三种方法,大致相同,只不过加了些额外的方法,功能而已;都挺简单就不多说了...

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: