`
yaerfeng1989
  • 浏览: 233009 次
  • 性别: 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.zip_osc

    **标题解析:** "OSC.zip_osc" 这个标题暗示了我们正在处理一个与OSC(Open Sound Control)相关的程序或库,它被压缩在名为"OSC.zip"的文件中。OSC是一种通信协议,常用于实时互动软件,如音乐、视觉艺术和多媒体...

    git@osc使用教程

    Git 是一个分布式版本控制系统,允许开发者在本地机器上存储和管理代码的历史版本记录。Git 的主要特点是分布式、非线性、离线提交和高性能。 使用 Git@OSC 需要安装 Git 软件,下载最新版本的 Git 可以从官方网站...

    0-OSC协议使用.rar

    例如,如果一个OSC消息表示模型的旋转,单位可能是弧度或度,需要在发送时明确指定。 **插件的使用** 在标签中提到了“插件”,这可能是指在PC端需要安装支持OSC协议的插件或者扩展,以便接收和处理来自平板的控制...

    协议源码osc

    Clojure是一种基于Lisp的函数式编程语言,运行在Java平台上,因此这个库很可能提供了与Java的JNI接口或者其他Java库的交互方式。 Clojure的OSC库可能包括以下组件: 1. **地址解析**: 解析和构造OSC地址路径,支持...

    OSC收费插件CTUPAY

    CTUPAY则是针对OSC设计的一款收费插件,它为OSC增加了对特定支付方式的支持,使得用户能够在购物过程中更方便地进行支付。 CTUPAY插件的主要功能在于整合了多种支付网关,特别是针对一些国际和本地的支付方式,为...

    OSC802 USB示波器配套软件

    2. OSC802 V3.10.0 虚拟示波器:此软件相当于在计算机上构建了一个虚拟的示波器面板,用户可以通过鼠标和键盘进行各种操作,如调整通道增益、设置时间基、选择触发模式等。虚拟示波器通常具有更高的灵活性,允许用户...

    Unity OSC Open Control

    4. **设置OSC服务器和客户端**:在Unity中,开发者需要配置一个服务器来监听特定端口的OSC消息,同时在需要发送数据的客户端上创建OSC客户端,指定服务器的IP地址和端口号。 5. **数据传输**:通过OSC,你可以发送...

    osc.rar_osc原理_示波器

    ** osc.rar_osc原理_示波器 ** ...总结来说,"osc.rar_osc原理_示波器"的资源包提供了理解示波器工作原理和操作虚拟示波器的机会,无论是在学术研究还是工程实践中,都是学习和应用示波器技术的一个宝贵工具。

    Ventuz.OSC

    Ventuz.OSC是一个关于Ventuz软件与Open Sound Control (OSC)协议交互的工具或库。Ventuz是一款强大的3D图形和交互式内容创作平台,常用于电视广播、虚拟现实、展览展示等领域。而OSC是一种通信协议,专为多媒体应用...

    quest3d osc通道介绍

    OSC是一种用于在不同设备间传递控制信息的标准协议,尤其适用于音频和视频合成器以及多媒体应用。Quest3D提供的OSC插件允许用户轻松地集成外部OSC数据流到Quest3D项目中。 #### 二、OSC Reader 插件详解 ##### 1. ...

    Python库 | osc-placement-1.5.0.tar.gz

    本文将深入探讨一个名为"osc-placement"的Python库,版本为1.5.0,它被封装在一个名为"osc-placement-1.5.0.tar.gz"的压缩包中。这个库主要用于处理OpenStack中的资源分配和定位问题,对于理解和操作OpenStack环境...

    OSC测试工具

    在这款OSC测试工具中,OpenGL被用来创建一个交互式的可视化环境,帮助用户直观地观察和分析OSC数据流。通过OpenGL,工具可以显示 OSC 消息的传输路径和接收状态,使得问题定位更为直观和高效。 **OSC协议核心概念**...

    PyPI 官网下载 | python-osc-1.4.1.zip

    python-osc是Python的一个开源库,用于处理OSC消息。它提供了创建、发送和接收OSC包的能力,使得Python开发者能够轻松地与支持OSC的硬件或软件进行交互。版本1.4.1是对该库的稳定更新,包含了一些优化和可能的bug...

    processing_osc_win32.zip_JAVA 示波器_Processing Arduino_arduino示波器_

    "JAVA 示例波器"指的是一个用Java语言编写的示波器软件,它可能是用于可视化模拟或数字信号的工具,常见于电子工程和计算机科学领域。"Processing Arduino"表明这个项目可能整合了Processing编程环境和Arduino硬件,...

    Unity3D OSC通讯和TUIO插件

    unity3D中对OSC以及TUIO通讯的插件。

    OSC.rar_it_osc

    标题中的"OSC.rar_it_osc"表明这是一个与OSC(可能是Oscillator,振荡器)相关的项目,且文件被压缩在名为"OSC.rar"的文件中。"it"可能指的是信息技术或者互连技术,而"Verilog for MaxV"则表示这个项目是用Verilog硬件...

    pt-osc在线重建表导致死锁的分析及对应的优化方案1

    - 分析日志确定事务的执行次序,结合pt-osc工作原理,可以发现死锁可能源于在拷贝最后一个chunk-size时,新插入的事务尝试获取auto-inc lock,而pt-osc正在等待这个锁。 5. **优化方案**: - 调整chunk-size,...

    WIn_OSC_4.43.zip

    【标题】"WIn_OSC_4.43.zip" 是LG公司提供的一个显示器屏幕控制软件的压缩包,版本号为4.43。这款软件专为Windows操作系统设计,旨在帮助用户更方便、高效地管理和调整LG显示器的各项设置。 【描述】中提到的功能...

    OSC.rar_OSC Server Windows_UDP labview_labview udp_open_touch os

    **"OSC Server Windows"** 指的是一个在Windows平台上运行的OSC服务器,该服务器能够接收并处理来自OSC客户端(例如iOS应用"Touch OSC")的命令和数据。LabVIEW中的这个VI允许用户构建一个自定义的OSC服务器,以便与...

    Top5-Kotlin-OSC.pdf

    - **Java**:在Java中,为了创建一个简单的数据模型类,需要手动添加getter和setter方法、`toString()`、`equals()`和`hashCode()`等方法。 - **Kotlin**:而在Kotlin中,只需声明一个DataClass即可自动生成这些...

Global site tag (gtag.js) - Google Analytics