`
yaerfeng1989
  • 浏览: 235552 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

分享一个在osc上看到的java版的截图软件

    博客分类:
  • java
阅读更多

感觉做的还不错,给大家分享下,要是改进下是不是可以和QQ截图媲美了。 程序截图

原创不易, 转载请注明出处:分享一个在osc上看到的java版的截图软件

 

package com.zuidaima.image.capture;

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.*;

import javax.swing.*;

public class Screenshot extends JFrame implements MouseMotionListener,
		MouseListener {
	private static final long serialVersionUID = 1L;
	private BufferedImage buff_img;
	private Robot robot;
	private JLabel label;
	private Point start;
	private Point end;
	private int x, y, width, height;
	private boolean over = false;
	private JLabel show_sub;
	private CaptureScreen captureScreen;
	private ImageIcon icon;
	private SubImgAction subAction;
	private JFrame ss = this;

	class SubImgAction implements MouseListener, MouseMotionListener {

		private JLabel label;
		private int x;
		private int y;
		private BufferedImage image;
		private ImageIcon icon;

		public SubImgAction(JLabel label, BufferedImage image, ImageIcon icon) {
			this.label = label;
			this.image = image;
			this.icon = icon;
		}

		@Override
		public void mouseDragged(MouseEvent e) {
			Point dragPoint = e.getPoint();
			SwingUtilities.convertPointToScreen(dragPoint, label);
			icon.setImage(image.getSubimage(dragPoint.x - x < 0 ? 0
					: dragPoint.x - x, dragPoint.y - y < 0 ? 0 : dragPoint.y
					- y, label.getWidth(), label.getHeight()));
			label.setLocation(dragPoint.x - x, dragPoint.y - y);
		}

		@Override
		public void mouseMoved(MouseEvent e) {
			// TODO Auto-generated method stub

		}

		@Override
		public void mouseClicked(MouseEvent e) {
			if (e.getButton() == 1 && e.getClickCount() == 2) {
				new ClipboardUtil().writeToClipboard(image.getSubimage(
						label.getX(), label.getY(), label.getWidth(),
						label.getHeight()));
				ss.dispose();
				JOptionPane.showMessageDialog(ss, "指定区域屏幕已复制到剪贴板!");
				captureScreen.setVisible(true);
			} else if (e.getButton() == 3) {
				ss.dispose();
				captureScreen.setVisible(true);
			}
		}

		@Override
		public void mouseEntered(MouseEvent e) {
			// TODO Auto-generated method stub

		}

		@Override
		public void mouseExited(MouseEvent e) {
			// TODO Auto-generated method stub

		}

		@Override
		public void mousePressed(MouseEvent e) {
			if (e.getButton() == 3) {
				ss.dispose();
				captureScreen.setVisible(true);
			}
			Point clickPoint = new Point(e.getPoint());
			SwingUtilities.convertPointToScreen(clickPoint, label);
			x = clickPoint.x - label.getX();
			y = clickPoint.y - label.getY();

		}

		@Override
		public void mouseReleased(MouseEvent e) {
			// TODO Auto-generated method stub

		}

	}

	public Screenshot(CaptureScreen captureScreen) {
		this.setLayout(null);
		this.captureScreen = captureScreen;
		icon = new ImageIcon();
		this.setSize(ScreanSizeUtil.getDimension());
		setUndecorated(true);
		setExtendedState(MAXIMIZED_BOTH);
		setResizable(false);// 设置不可改变大小
		setAlwaysOnTop(true);// 设置总是在顶层(最上层)
		start = new Point();
		end = new Point();
		label = new JLabel();
		show_sub = new JLabel();
		show_sub.setIcon(icon);

		add(show_sub);
		try {
			robot = new Robot();
			buff_img = robot.createScreenCapture(new Rectangle(0, 0,
					ScreanSizeUtil.getDimension().width, ScreanSizeUtil
							.getDimension().height));// 获得整个屏幕

			subAction = new SubImgAction(show_sub, buff_img, icon);
			show_sub.addMouseListener(subAction);
			show_sub.addMouseMotionListener(subAction);
			show_sub.setBorder(BorderFactory.createLineBorder(Color.RED, 2));

			label = new JLabel() {
				private static final long serialVersionUID = 1L;

				protected void paintComponent(Graphics g) {
					super.paintComponent(g);
					g.drawImage(buff_img, 0, 0, this);
					Graphics2D g2d = (Graphics2D) g;
					g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
							RenderingHints.VALUE_ANTIALIAS_ON);
					g2d.setColor(new Color(150, 150, 150));
					AlphaComposite composite = AlphaComposite.getInstance(
							AlphaComposite.SRC_OVER, 60 / 100.0F);
					g2d.setComposite(composite);
					g2d.fill(new RoundRectangle2D.Float(0, 0, this.getWidth(),
							this.getHeight(), 0, 0));
				}
			};
			label.setBounds(0, 0, getWidth(), this.getHeight());
			add(label);
		} catch (AWTException e) {
			e.printStackTrace();
		}

		setVisible(true);
		try {
			Thread.sleep(500);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		robot.createScreenCapture(new Rectangle(0, 0, ScreanSizeUtil
				.getDimension().width, ScreanSizeUtil.getDimension().height));
		addMouseListener(this);
		addMouseMotionListener(this);
	}

	@Override
	public void mouseClicked(MouseEvent e) {

	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void mousePressed(MouseEvent e) {
		start.x = e.getX();
		start.y = e.getY();
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		over = true;
	}

	@Override
	public void mouseDragged(MouseEvent e) {
		if (!over) {
			end.x = e.getX();
			end.y = e.getY();
			x = Math.min(start.x, end.x);
			y = Math.min(start.y, end.y);
			width = Math.abs(end.x - start.x);
			height = Math.abs(end.y - start.y);
			if (width == 0 || height == 0)
				return;
			icon.setImage(buff_img.getSubimage(x, y, width, height));
			show_sub.setBounds(x, y, width, height);
			// repaint();
		}
	}

	@Override
	public void mouseMoved(MouseEvent e) {
		end.x = e.getX();
		end.y = e.getY();
		// repaint();
	}
}

 代码下载地址:http://www.zuidaima.com/share/1550463293164544.htm

 

0
0
分享到:
评论

相关推荐

    osc:开源中国应用程序代码

    "osc:开源中国应用程序代码"这个标题指的是开源中国(Open Source China)的源代码,它是一个专注于开源技术的社区平台,旨在推动中国开源软件的发展。开源中国的应用程序代码可能包括了社区论坛、项目托管、博客、...

    IronTrack:使用 TouchOSC 控制遥控车的 Android 应用程序

    【IronTrack: 使用 TouchOSC 控制遥控车的 Android 应用程序】 IronTrack 是一个创新的 Android...其背后涉及的 Java 编程、OSC 协议、硬件接口设计等多个技术层面,对于 IT 从业者来说,提供了丰富的学习和实践机会。

    拒绝无效学习!C语言核心知识点脑图与速查表.pdf

    # 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。 C语言的高效性与可移植性令人瞩目。它能直接操控硬件,执行速度快,是系统软件、嵌入式开发的首选。同时,代码可在不同操作系统和硬件平台间轻松移植,极大节省开发成本。 学习C语言,能让你深入理解计算机底层原理,培养逻辑思维和问题解决能力。掌握C语言后,再学习其他编程语言也会事半功倍。 现在,让我们一起开启C语言学习之旅。这里有丰富教程、实用案例、详细代码解析,助你逐步掌握C语言核心知识和编程技巧。别再犹豫,加入我们,在C语言的海洋中尽情遨游,挖掘无限可能,为未来的编程之路打下坚实基础!

    EQ4增距镜设备产生的不良图片

    EQ4增距镜设备产生的不良图片需要分析计算

    行业标杆案例:WPS深度集成DeepSeek的技术实现路径.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    响应处理进阶:解析DeepSeekAPI的JSON数据结构与错误码.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    微服务架构中Spring Cloud的核心组件解析及其应用场景

    内容概要:本文详细介绍了从传统单体架构向微服务架构的演变过程,阐述了微服务架构的优势及解决的传统单体架构存在的弊端。特别重点讲述了微服务架构中重要组件之一——Spring Cloud,及其如何通过一系列工具如服务注册与发现-Eureka、负载均衡-Ribbon、断路器-Hystrix、服务网关-Zuul和分布式配置中心-Config,来支撑和服务于分布式应用的需求。文中结合实例讲解了如何基于Spring Cloud搭建微服务项目,涵盖环境准备到创建具体微服务步骤,再到各微服务间的交互实现细节。最终对整个架构的优势进行了总结,讨论了未来发展趋势及广阔的应用场景。 适合人群:对微服务架构及Spring Cloud框架感兴趣的开发人员或架构师。 使用场景及目标:本指南适用于想要理解和实施现代化微服务架构的企业和个人开发者,旨在引导读者熟悉微服务体系的整体概念、设计理念,掌握关键组件的具体配置和使用方法,从而能够在真实环境中设计并建立稳定的微服务架构。 其他说明:尽管Spring Cloud具有明显优势,但也有一定的学习门槛和技术挑战,特别是对于初次接触微服务的新手而言。因此,在学习和实践中需要注意理论结合实际案例练习,逐步提升技术水平以克服可能出现的各种难题。

    调试神器GDB的20个魔法命令.pdf

    # 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。 C语言的高效性与可移植性令人瞩目。它能直接操控硬件,执行速度快,是系统软件、嵌入式开发的首选。同时,代码可在不同操作系统和硬件平台间轻松移植,极大节省开发成本。 学习C语言,能让你深入理解计算机底层原理,培养逻辑思维和问题解决能力。掌握C语言后,再学习其他编程语言也会事半功倍。 现在,让我们一起开启C语言学习之旅。这里有丰富教程、实用案例、详细代码解析,助你逐步掌握C语言核心知识和编程技巧。别再犹豫,加入我们,在C语言的海洋中尽情遨游,挖掘无限可能,为未来的编程之路打下坚实基础!

    2015年上半年软件设计师上午题真题知识点总结

    2015年上半年软件设计师上午题真题知识点总结

    成本控制秘籍:DeepSeekAPI计费规则与用量监控方案详解.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    auto_gptq-0.7.1-cp310-cp310-win_amd64.whl

    auto_gptq-0.7.1-cp310-cp310-win_amd64.whl

    2024年第一季度车险保费和利润排行榜.xlsx

    2024年第一季度车险保费和利润排行榜.xlsx

    房屋租赁合同[示范文本].doc

    房屋租赁合同[示范文本].doc

    60133-main.zip

    60133-main.zip

    安驾记录仪2.2.1录视频记录视频,熄屏录视频快递拍视频

    安驾记录仪2.2.1录视频记录视频,熄屏录视频快递拍视频

    基于matlab实现的图像处理 最近邻 双线性 RBF 图像修复+源码(毕业设计&课程设计&项目开发)

    基于matlab实现的图像处理 最近邻 双线性 RBF 图像修复+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于matlab实现的图像处理 最近邻 双线性 RBF 图像修复+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 基于matlab实现的图像处理 最近邻 双线性 RBF 图像修复+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 基于matlab实现的图像处理 最近邻 双线性 RBF 图像修复+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于matlab实现的图像处理 最近邻 双线性 RBF 图像修复+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~

    爱华AIWA HS-J9磁带随身听维修服务手册 说明书电路原理图PCB图

    爱华AIWA HS-J9磁带随身听维修服务手册 说明书电路原理图PCB图

    智能体开发实战:基于DeepSeek构建对话式代码补全工具.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    爱华AIWA HS-JL505型号,磁带随身听维修服务手册 说明书电路原理图PCB图

    爱华AIWA HS-JL505型号,磁带随身听维修服务手册 说明书电路原理图PCB图

    企业级部署方案:基于阿里云的DeepSeekAPI高可用架构设计.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

Global site tag (gtag.js) - Google Analytics