`
ruantongsheng
  • 浏览: 21142 次
  • 来自: ...
社区版块
存档分类
最新评论

screen capture

 
阅读更多
package screenCapture;
import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;

import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class ScreenCapture {
// test main
public static void main(String[] args) throws Exception {
try {
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();

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();
ImageIcon icon=capture.getPickedIcon();
ImageTransferable it=new ImageTransferable(icon);
cb.setContents(it, it);
imagebox.setIcon(icon);
frame.setContentPane(panel);
frame.setSize(400, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
System.out.println("Over");
} catch (Exception e) {
e.printStackTrace();
}

}
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;
//ImageTransferable
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;
}
分享到:
评论

相关推荐

    SPX Instant Screen Capture v6.0 汉化版

    PX Instant Screen Capture 是一款强大的、易于使用的、直观的、非 常流行的屏幕捕捉软件。它非常适合于专业与非专业用户使用。您仅需要 使用鼠标或热键便可以快速地对屏幕进行捕捉。您捕捉的屏幕快照将可以 被自动...

    FastStone Screen Capture(FSCapture) 7

    FastStone Screen Capture(FSCapture)是一款很棒的图像浏览、编辑和抓屏工具,FastStone Capture支持包括BMP、JPEG、JPEG 2000、GIF、PNG、PCX、TIFF、WMF、ICO 和TGA在内的所有主流图片格式,其独有的光滑和毛刺...

    Optix Screen Capture (Screenshot)

    Optix Screen Capture (Screenshot)

    SPX Instant Screen Capture 7.0汉化版

    SPX Instant Screen Capture 7.0汉化版

    屏幕录像工具 Movavi Screen Capture Studio 10.2.0 中文.zip

    Movavi Screen Capture Studio 9 中文版主要功能: – 视频屏幕捕获: 录制程序截屏视频、在线视频、Skype 通话等 – 可自定义的捕获区域: 录制全屏、屏幕的任何部分或选定窗口 – 变速: 每秒 15 至 60 帧 – 捕获键盘...

    spx Instant Screen Capture V6.0

    很好用的截图软件spx Instant Screen Capture V6.0

    ScreenCapture经典代码

    ScreenCapture经典代码,涵盖全了

    SPX Instant Screen Capture v6.0 汉化绿色版.rar

    SPX Instant Screen Capture 是最棒的截图工具超方便使用,运行时只在任务栏占一个小小的图标,不带任何主体窗口,撕边及底色效果可自定义,默认的保存路径为桌面,用过后的图不用再进文件夹可直接删除了.(支持保存为:BMP...

    截图SPXInstantScreenCapture

    截图SPXInstantScreenCapture

    matlab 屏幕截图ScreenCapture

    国外写的一个比较好的matlab截图代码,使用很简单,解压出来即可使用。

    matlab开发-screencapture

    matlab开发-screencapture。编程捕获屏幕的小实用程序

    ScreenCapture.zip

    ScreenCapture.zip,利用android 5.0 API 提供完整的录制视频库

    ScreenCapture

    此文件包含组成 ScreenCapture 应用程序的每个文件的内容摘要。 ScreenCapture.vcproj 这是使用“应用程序向导”生成的 VC++ 项目的主项目文件。 它包含有关生成文件的 Visual C++ 版本的信息,以及 有关用...

    screencapture

    截图工具,支持自动截图,也可以自定义截图间隔时间,支持全屏合和幻灯片查看截图

    方便快捷的截图软件SPX INSTANT SCREEN CAPTURE

    SPX INSTANT SCREEN CAPTURE方便快捷的截图软件,可以手动设置截图方式,可以直接设置到粘贴板中,在发邮件或做电子表格时直接粘贴就可以了!!!

    SPX Instant Screen Capture 4.3注册版

    SPX Instant Screen Capture is a screen capture tool that brings the convenience of selecting a portion of the screen and sending it instantly to a destination of your choice, including any location on...

    FoxArc Screen Capture 1.2 汉化单文件便携版

    FoxArc Screen Capture 是一个可以替代系统屏幕截图的简单易用的轻量级屏幕捕捉程序,你可以捕获任意屏幕内容,包括矩形/椭圆形区域,窗口,对象,全屏.捕获的图片可以保存为JPG, BMP, PCX, PNG, PNM 和 TIFF格式.

    Screen Capture

    screen capture Open source software. developed by some students of hcmuns in vn, it's in their "C 4 windows" course. Have fun! <br/>

Global site tag (gtag.js) - Google Analytics