博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 截图源码
阅读量:5757 次
发布时间:2019-06-18

本文共 3447 字,大约阅读时间需要 11 分钟。

package com.cunzhang;

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键保存图片到桌面,并退出程序。 点击右上角(没有可见的按钮),退出程序,不保存图片。
*
* <pre>
* 不能立即给你提供源码 但是可以教给你怎么实现。
* 首先 你要截屏 肯定要在属于用鼠标圈定一个区域来截取这个区域。
*
* 你可以这样:
* 先截取当前屏幕的满屏图片:new robot().createScreenCapture(r) 这个是截屏代码 r是Rectangle类型 代表要截取的区域。
*
* 然后用 JDialog 做一个无控制条的窗口,大小设置成满屏,把截取的这个满屏的图片贴到这个 JDiaglog 里
*
* 然后做一下鼠标圈定区域,这个很简单 不详细说了, 最后对你圈定的这个区域再做一次截屏,这个不就是你要的截图了。,。 最后别忘了 截屏完毕后 关闭JDialog
*
* 你要是觉得这样做麻烦,也没别的办法。 反正我很明白 QQ的截屏也是这样做的
* </pre>
*
* @author JinCeon
*/
public class ScreenCapture
{
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(JFrame.EXIT_ON_CLOSE);
this.addMouseListener(new MouseAdapter()
{
@Override
public void mousePressed(MouseEvent e)
{
orgx = e.getX();
orgy = e.getY();
}
});
this.addMouseMotionListener(new MouseMotionAdapter()
{
@Override
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();
}
}
}

转载地址:http://nnvkx.baihongyu.com/

你可能感兴趣的文章
Struts2笔记——struts.xml配置详解
查看>>
发一个 ExtJS 4.2.0 的页面源码(规则比对公式 的设置页面)
查看>>
Entity Framework Code First添加修改及删除单独实体
查看>>
openstack
查看>>
线程进程间通信机制
查看>>
galera mysql 多主复制启动顺序及命令
查看>>
Glibc辅助运行库 (C RunTime Library): crt0.o,crt1.o,crti.o crtn.o,crtbegin.o crtend.o
查看>>
毛玻璃效果
查看>>
mysql常用命令
查看>>
郑捷《机器学习算法原理与编程实践》学习笔记(第七章 预测技术与哲学)7.1 线性系统的预测...
查看>>
Partial Sum
查看>>
JS prototype 属性
查看>>
中位数性质——数列各个数到中位数的距离和最小
查看>>
排序算法 & 迷宫的深度, 广度优先
查看>>
eclipse里报:An internal error occurred during: "Building workspace". Java heap space(内存溢出)...
查看>>
51Nod 1091:线段的重叠(贪心)
查看>>
《将博客搬至CSDN》
查看>>
五大常用算法之四:回溯法
查看>>
Niagara物联网框架机制一(笔记)
查看>>
Sonar rule for multithread
查看>>