有一次在课上无意中看了东哥演示的隐形画图板,感觉比较有趣,于是头脑发热,回去就马上动手,话了 一晚上时间,编出一个比较丑陋的所谓的隐形画图板。其实说吧,这个画图板就是一个骗人的东西,它的原理就是先把当前屏幕图片截下来,然后再画到窗体上,把窗体大小设置成屏幕大小,去掉窗体上的关闭按钮,就得到了一个隐形画图板了。接下来逐步介绍怎么实现这个画图板的几个窗用的功能。
一、将窗体设置成屏幕大小,该过程使用了Java中的一个工具Toolkit 代码如下:
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension dm = toolkit.getScreenSize();
this.setSize(dm);
二、去掉窗体的关闭按钮,用到了Java自带的一个窗体修饰方法setUndecorated(true),参数true表示不可修饰,得到一个空白窗体,代码很简单,就一行:
this.setUndecorated(true);
三、获取当前屏幕背景图片,并保存到工程下,该过程用到了Java自带的Robot和ImageIO方法;具体代码实现如下:
Rectangle rect = new Rectangle(dm);
Robot robot = new Robot();
BufferedImageimage=robot.createScreenCapture(rect);
try {
ImageIO.write(image, "jpg", new File("C:\\Users\\Administrator\\workspace\\隐形画图板\\img\\" + "a" + ".jpg"));
} catch (IOException ef) {
// TODO Auto-generated catch block
ef.printStackTrace();
}
g.drawImage(image, 0 , 0, dm.width, dm.height,Color.white, null);
} catch (AWTException ea) {
// TODO Auto-generated catch block
ea.printStackTrace();
}
//主窗体
package cjl.deaw1;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
/**
* 画图板界面类
*
* @author Administrator
*
*/
public class DrawUI extends JFrame {
BufferedImage image;
Image image1;
public static void main(String args[]) {
new DrawUI();
}
/**
* 初始化界面的方法
*/
public DrawUI() {
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension dm = toolkit.getScreenSize();
JPanel panel=new JPanel();
panel.setBackground(Color.WHITE);
panel.setPreferredSize(dm);
this.setSize(dm);
FlowLayout fl = new FlowLayout();
this.setUndecorated(true);
this.setLayout(fl);
this.setAlwaysOnTop(true);
this.setDefaultCloseOperation(3);
this.add(panel );
this.setVisible(true);
// 从窗体上获取画布对象
// 获取窗体在屏幕上所占据的区域,这块区域是允许改变颜色的
Graphics g = this.getGraphics();
// int [] x={100,150,300};
// int [] y={100,200,300};
// g.drawPolygon(x, y, 3);
// Graphics2D g2d = (Graphics2D) this.getGraphics();
// 创建鼠标监听器对象
DrawListener dlis = new DrawListener(g,this);
// 给窗体加上鼠标监听器
this.addMouseListener(dlis);
try {
Rectangle rect = new Rectangle(dm);
Robot robot = new Robot();
BufferedImage image = robot.createScreenCapture(rect);
try {
ImageIO.write(image, "jpg", new File("C:\\Users\\Administrator\\workspace\\隐形画图板\\img\\" + "a" + ".jpg"));
} catch (IOException ef) {
// TODO Auto-generated catch block
ef.printStackTrace();
}
g.drawImage(image, 0 , 0, dm.width, dm.height,Color.white, null);
} catch (AWTException ea) {
// TODO Auto-generated catch block
ea.printStackTrace();
}
}
}
//监听器
package cjl.deaw1;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JOptionPane;
/**
* 画板的监听器,实现鼠标监听器接口
*
* @author Administrator
*
*/
public class DrawListener implements MouseListener {
private int x1, y1, x2, y2;
private Graphics gr;
public float stroke;
DrawUI drawUI;
public DrawListener(Graphics gr, DrawUI drawUI) {
this.gr = gr;
this.drawUI=drawUI;
}
public void mousePressed(MouseEvent e) {
// 获取鼠标按下时候光标的位置
x1 = e.getX();
y1 = e.getY();
if (e.isMetaDown()) {
JOptionPane.showMessageDialog(drawUI, "你你确定要退出吗?");
System.exit(0);
}
if (e.isControlDown())
System.out.println();
// draw(x1, y1, 100, 1);
}
public void mouseReleased(MouseEvent e) {
// 获取鼠标释放时候光标的位置
x2 = e.getX();
y2 = e.getY();
for (int i = 0; i <= 50; i++) {
gr.setColor(new Color(155 + 2 * i, 100 + 2 * i, 40 + 2 * i));
gr.fillOval(Math.min(x1, x2) + i, Math.min(y1, y2), 100 - 2 * i,
160 - 2 * i);
}
}
public void mouseEntered(MouseEvent e) {
// System.out.println("mouseEntered");
}
public void mouseExited(MouseEvent e) {
// System.out.println("mouseExited");
}
public void mouseClicked(MouseEvent e) {
// System.out.println("mouseClicked");
}
public void draw(double x0, double y0, int L, int n) {
double x1 = 0, y1 = 0;
if (n <= 0) {
return;
} else {
for (int i = 0; i <= 800; i++) {
try {
Thread.sleep(5);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if (i <= 200) {
L = i;
gr.setColor(new Color(255 - i, i, i));
gr.fillOval((int) (x0 + L), (int) y0, 10, 10);
}
if (i >= 200 && i <= 400) {
L = i - 200;
gr.setColor(new Color(455 - i, i - 200, i - 150));
gr.fillOval((int) (x0 + 200), (int) y0 + L, 10, 10);
}
if (i >= 400 && i <= 600) {
L = 600 - i;
gr.setColor(new Color(655 - i, i - 400, i - 350));
gr.fillOval((int) x0 + L, (int) y0 + 200, 10, 10);
}
if (i >= 600 && i <= 800) {
L = 800 - i;
gr.setColor(new Color(855 - i, i - 600, i - 550));
gr.fillOval((int) x0, (int) y0 + L, 10, 10);
}
x1 = Math.sin((x0 + i) / 4) * 100;
y1 = Math.sin((y0 + i) / 4) * 100;
// System.out.println("x1:" + x1 + "\n" + "y1;" + y1);
}
}
draw(y1 + 140, y1 + 140, L, n - 1);
}
}
分享到:
相关推荐
本篇文章将详细探讨如何使用Java实现图片水印的添加,以及相关的知识点。 首先,我们需要了解Java中的图像处理库。Java标准库提供了`java.awt`和`javax.imageio`包,它们包含了处理图像的基本功能。`java.awt`包中...
图像数字水印是一种在数字图像中嵌入隐秘信息的...在提供的《图像数字水印的JAVA实现.pdf》文档中,应详细讲解了如何运用Java来实现这一过程,包括具体的代码示例和步骤指导,对Java和C++学习者都具有很高的参考价值。
1. **原理**:图像隐形水印技术主要是通过对图像的某些特性进行微小但可检测的改动来实现水印的嵌入。这些改动通常是通过数学变换完成的,例如傅里叶变换、离散余弦变换(DCT)等。 2. **研究方法**: - **频域法**...
本项目即为一个用Java实现的FTP连接与数据浏览程序,它可以帮助用户方便地查看远程FTP服务器上的文件和目录结构。 首先,这个程序的核心是Java的`java.net`和`java.io`包,它们提供了网络通信和输入/输出的基础支持...
ECSHOP隐形眼镜网站模板是一款专为在线销售隐形眼镜设计的电商网站模板,采用粉色系为主题色,营造出温馨、柔和的购物环境,旨在吸引并满足不同年龄段女性消费者的需求。这款模板基于ECSHOP平台,ECSHOP是中国流行的...
《电子相册模板Flash——隐形的翅膀》 在数字化时代,电子相册作为一种创新的存储和展示个人照片的方式,越来越受到人们的欢迎。本资源“隐形的翅膀”是一款以Flash技术为基础设计的电子相册模板,它以其独特的动态...
总的来说,Java开发的屏幕照相机是一款利用Java的跨平台特性和丰富的库资源实现的高效工具,具有隐形运行和屏幕监控功能,适用于多种应用场景。其开发涉及GUI设计、图像处理、文件操作以及网络通信等多个技术领域,...
AS2协议详解及JAVA版代码
标题提到的“用osg实现的隐形效果”,实际上是指利用OSG的特性来创建物体透明度变化或消失的视觉效果,这在游戏开发、模拟仿真等领域中非常常见。描述中提到的“实时阴影”则涉及到OSG的阴影渲染技术,这是提升3D...
在Java中实现数字水印,通常涉及图像处理库,如Java Advanced Imaging (JAI) 或 JavaFX。 1. **水印嵌入**:这个过程是将水印信息透明地添加到原始图像中,通常通过修改图像的像素值来实现。在Java中,可以通过读取...
在Java开发中,有时我们需要对各种类型的文档进行保护或标识,这时添加文本水印是一种有效的方法。本教程将详细介绍如何使用Free Spire.Office for Java库为Word、PPT和PDF文档添加文本水印,以及如何利用Apache POI...
通过人工智能视觉识别实现隐形斗篷
此外,环保和节能也将是设计的重要考虑因素,例如开发使用太阳能供电的设备。 总结来说,教学用隐形黑板作为现代教育技术的产物,它改变了传统的教学模式,提升了教学效率,同时也为创造更具互动性和趣味性的学习...
金融大数据-基于各种机器学习算法实现银行违约数据隐形预测系统python源码+数据集+报告.zip 【资源说明】 1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通...
淘宝隐形降权检测是电商运营中的一个重要概念,尤其对于依赖淘宝平台销售商品的商家来说,了解这一机制至关重要。淘宝为了维护市场公平竞争和消费者权益,会采取一种名为“隐形降权”的措施,针对某些违规或者表现不...
方井条形盖板隐形井盖包边做法.dwg
如果包含源代码,那么用户或开发者可以查看和学习如何实现窗口隐形功能,这对于学习操作系统编程和理解窗口管理机制非常有帮助。 在使用窗口隐形工具时,用户需要注意以下几点: 1. 不要在未经授权的情况下使用此...
网神之网络隐形衣是针对目前严峻的网络安全环境研发的具有创新思想和专有技术的新型网络安全套件。 目前,网络安全环境异常严峻:病毒...网神之网络隐形衣(以下简称网络隐形衣)就能帮助人们实现这一理想目的。