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;
}
分享到:
- 2007-12-20 12:16
- 浏览 1634
- 评论(3)
- 论坛回复 / 浏览 (3 / 5789)
- 查看更多
相关推荐
根据给定的文件信息,我们可以总结出以下关于使用Java实现屏幕截图的重要知识点: ### Java屏幕抓图技术概览 在Java中,实现屏幕抓图主要依赖于`java.awt.Robot`类,它提供了屏幕捕获的功能。通过创建`Robot`实例...
### JAVA实现屏幕抓图与远程桌面控制 #### 一、Java屏幕抓图技术解析 在Java中,要实现屏幕抓图的功能,主要依赖于`java.awt.Robot`类。该类提供了一系列方法来模拟键盘和鼠标操作,并允许开发人员捕获整个屏幕或...
在Java编程语言中,实现屏幕抓图功能是一项常见的任务,特别是在开发桌面应用或者需要进行自动化测试时。这个项目提供了一段源码,模仿了QQ截图的功能,允许用户通过拖动鼠标来选择屏幕上的任何区域进行截图,并且...
压缩包中的"ScreenCapture"可能是一个Java源文件,包含了实现屏幕抓图功能的主要代码。通常,它会包含一个主类,其中包含创建Robot对象、截取屏幕并保存或显示截图的逻辑。 8. **学习与实践**: 对于初学者来说,...
总结来说,构建一个屏幕抓图程序需要对Java GUI编程有深入理解,包括`java.awt`包下的各种类和接口。同时,还需要熟悉系统级交互和多线程编程,以实现更复杂的特性和功能。通过不断的实践和学习,开发者可以创建出...
8. 源代码阅读与学习:对于这个压缩包中的"屏幕抓图"文件,使用者可以通过阅读源代码来深入理解屏幕抓图的实现过程,学习如何将理论知识应用到实际项目中。 总之,屏幕抓图小程序是一个综合性的项目,涵盖了图像...
屏幕抓图,获取byte[]是计算机编程中一个常见的任务,主要应用于截图软件、远程桌面协作、游戏录制等领域。在这个过程中,我们需要将屏幕上的图像信息捕获并转化为字节数组(byte[]),以便于存储、传输或者进一步...
本资源聚焦于使用JAVA语言开发抓图程序,提供了一份详细的PPT教程,适合正在学习JAVA编程或者希望掌握屏幕截图功能的开发者。 【描述】:“这是对上一个资源JAVA抓图程序的PPT说明,格式是PPTX,如果学习的话可以...
标题中的“返回服务端当前屏幕抓图源码”是指一种技术实现,允许远程用户通过网络访问服务端(通常是服务器)的实时屏幕截图。这项技术基于客户端-服务器模型,其中客户端(例如,用户的浏览器)发送请求到服务器,...
通过深入研究"红蜻蜓抓图"的源代码,开发者不仅可以学习到如何利用Java实现屏幕截图应用,还能理解如何设计和优化面向对象的代码结构,以及如何打造用户友好的图形界面。对于想要提升Java编程技能或对桌面应用开发感...
实现屏幕抓图的技术有多种,其中最基础的是操作系统内置的功能。例如,在Windows系统中,可以使用Print Screen (PrtScn) 键来全屏截图,或者使用Alt + PrtScn组合键来捕获当前活动窗口。截取的图像会被复制到剪贴板...
综合以上信息,这个项目实现了一个基于MFC的屏幕截图工具,用户可以通过自定义选择区域,然后将截取的屏幕图像保存到文件中。整个过程涉及到Windows API调用、MFC组件的使用、图像数据处理和文件操作等多个知识点。
在这个场景中,我们可以使用Java编程语言,结合AWT(Abstract Window Toolkit)库来实现这一功能。下面将详细介绍这个过程及其相关知识点。 首先,我们需要理解`URL`(统一资源定位符)是互联网上的资源的唯一地址...
9. 编程语言和工具:根据源代码的文件扩展名,我们可以推测该程序可能是用C++、C#、Java或Python等语言编写的,因此还需要对应语言的基础知识。 通过研究这个项目的源代码,开发者不仅可以提升编程技巧,还能深入...
在技术实现上,服务端抓图可能使用了操作系统级别的截图API,或者利用屏幕捕获库来捕获桌面图像。这些图像可能经过压缩优化后通过HTTP、TCP/IP或者其他定制的网络协议发送到客户端。客户端则需要解码并显示这些图像...
ATM的Java实训项目设计报告书是一份详细记录了如何使用Java编程语言实现自动取款机(ATM)系统的设计报告。这份报告由何珍珍和张明月两位同学完成,他们在河南经贸职业学院信息管理系学习《Java程序设计》课程,并在...
屏幕捕捉软件可以用多种编程语言实现,如C++、C#、Python、Java等。每种语言都有其优势和适用场景,比如C++和C#在图形界面和性能上有优势,Python则易于开发和维护。 6. **跨平台考虑** 如果需要开发跨平台的屏幕...
通常,服务端可以使用多种编程语言实现,如Java、Python、Node.js或C#。服务端需要处理的主要任务包括接收客户端的监控请求,根据请求执行屏幕截图操作,并将截图数据传输回客户端。 2. **屏幕截图技术**:服务端...
在Java编程语言的广阔世界里,有一款名为"ScreenShotForMac"的工具,专门针对Mac用户设计,旨在提供便捷的屏幕抓图功能。本文将深入探讨这款程序的实现原理和应用价值。 首先,让我们了解一下Java编程语言。Java是...
在这个课程设计中,学生将使用Java语言来实现这一系统,以提升其编程技能和对面向对象设计的理解。 1. 概述 在设计ATM机系统时,首先需要进行问题分析。这涉及理解ATM机的主要功能,如存款、取款、查询余额、转账等...