`

基于Swing的图片倒影特效

阅读更多
关键字:Swing,倒影特效,Graphics2D,GradientPaint,translate,scale,rotate

一个Swing的倒影特效,如图

为了可以更好的了解程序,首先介绍一下Graphics2D的几个重要方法,然后是负责控制渐变的类GradientPaint。

一.Graphics2D的三个重要方法
translate(int x, int y);使图形对象进行一个(dx, dy)的平移。
scale(double sx, double sy);该方法会围绕坐标原点调整图形对象的大小。值可以是负值,表示根据坐标轴对称。
rotate(double theta); 该方法会围绕坐标原点旋转图形对象。

二.GradientPaint类的作用
GradientPaint是Java2D中专门用来控制渐变的类,它提供了使用线性颜色渐变模式填充 Shape 的方法。其构造函数GradientPaint(float x1, float y1, Color color1, float x2, float y2, Color color2),充分说明了它的作用,即从点(x1,y1)到点(x2,y2)进行渐变。更详细一些的资料见文章:http://javapub.iteye.com/blog/781482

三.镜面特效的思路
1. 先开辟一块内存空间,用于存放新的图片,新图片的尺寸,宽等于原图片,高是原图片的两倍。
BufferedImage result = new BufferedImage(image.getWidth(), height * 2,
				BufferedImage.TYPE_INT_ARGB);

2. 在新图片的上半部分画原始图片
// 画原始图片。
g2.drawImage(image, 0, 0, null);
// 画对称线。


3. 在新图片的中间画一条黑线,黑线的宽度为两个像素
g2.setColor(Color.black);
g2.setStroke(new BasicStroke(2));
g2.drawLine(0, 346, 600, 346);


4. 在新图片的下半部分画对称图片
g2.scale(1.0, -1.0);
g2.drawImage(image, 0, -2 * height, null);
g2.scale(1.0, -1.0);


5. 给新图片的下半部分设置渐变,此处大家可以修改渐变的值,从而获得不同的渐变效果。例如:设置渐变的部分,范围等。
// 对称图片设置渐变。
g2.translate(0, height);
GradientPaint mask;
mask = new GradientPaint(0, 0, new Color(1.0f, 1.0f, 1.0f, 1.0f), 0,
				height, new Color(1.0f, 1.0f, 1.0f, 0.0f));
g2.setPaint(mask);
g2.setComposite(AlphaComposite.DstIn);
g2.fillRect(0, 0, image.getWidth(), height);


6.调用组件的paintComponent方法,绘制图片
protected void paintComponent(Graphics g) {
		Graphics2D g2 = (Graphics2D) g;

		g2.translate(20, 20);
		g2.drawImage(image, 0, 0, null);
		g2.translate(-20, -20);
	}


四.源码
附件是完整的程序。
2
0
分享到:
评论
3 楼 cheng330301560 2011-11-20  
scale(double sx, double sy);该方法会围绕坐标原点调整图形对象的大小。值可以是负值,表示根据坐标轴对称

最后说负值时我不是很明白,什么个坐标轴对称法
2 楼 javapub 2010-11-30  
sunwenran 写道
不错
如果实体改了 镜像不会改。。so  还需要个repaintmanager

是的。
1 楼 sunwenran 2010-11-30  
不错
如果实体改了 镜像不会改。。so  还需要个repaintmanager

相关推荐

    基于Swing技术实现“HoneyViewer”图片查看器

    HoneyViewer图片查看器是一个基于java Swing实现的图片查看器,主要实现了图片展示功能。 本实验手册根据需求完成图片读取、切换等功能,平台的全称为:基于java Swing实现的HoneyViewer图片查看器(后简称为: Keep-...

    基于Swing的图片浏览器源代码

    基于Swing的图片浏览器源代码是一个典型的案例,展示了如何利用Swing组件来创建一个能够浏览和操作图像的应用程序。在这个案例中,我们将深入探讨Swing的基本概念、组件使用以及如何实现图片的加载和展示。 1. **...

    Java 基于swing 坦克游戏.zip

    Java 基于swing 坦克游戏.zipJava 基于swing 坦克游戏.zip Java 基于swing 坦克游戏.zipJava 基于swing 坦克游戏.zip Java 基于swing 坦克游戏.zipJava 基于swing 坦克游戏.zip Java 基于swing 坦克游戏.zipJava ...

    基于swing的多线程聊天室

    【基于Swing的多线程聊天室】是一个Java应用程序,它利用了Swing库来构建图形用户界面(GUI)并采用多线程技术实现多用户之间的实时通信。Swing是Java Standard Edition(Java SE)的一部分,提供了丰富的组件库用于...

    基于Swing的图片浏览器源运行例子

    这个"基于Swing的图片浏览器源运行例子"是《疯狂Java实战演义》一书中第三章的一个实践项目,旨在帮助读者深入理解如何利用Swing来创建一个功能完备的图片查看器应用程序。以下是对这个案例的详细解析: 首先,...

    Java基于Swing实现的简单聊天室,支持多人在线闲谈.zip

    这个“Java基于Swing实现的简单聊天室,支持多人在线闲谈.zip”文件是一个示例项目,展示了如何利用Swing构建一个基本的多用户聊天应用。下面将详细阐述其涉及的关键知识点。 1. **Swing组件**:Swing提供了丰富的...

    基于Java Swing + MySQL的图书管理系统,优秀Java毕业设计系统,小白必看!

    基于Java Swing + MySQL的图书管理系统,优秀Java毕业设计系统,小白必看! 基于Java Swing + MySQL的图书管理系统,优秀Java毕业设计系统,小白必看! 基于Java Swing + MySQL的图书管理系统,优秀Java毕业设计系统...

    基于SWING和MyBatis的学生成绩管理系统设计与实现.pdf

    基于SWING和MyBatis的学生成绩管理系统设计与实现.pdf基于SWING和MyBatis的学生成绩管理系统设计与实现.pdf基于SWING和MyBatis的学生成绩管理系统设计与实现.pdf基于SWING和MyBatis的学生成绩管理系统设计与实现.pdf...

    基于Swing开发的贪吃蛇小游戏.zip

    【标题】基于Swing开发的贪吃蛇小游戏.zip 【知识点详解】 Swing是Java提供的一种用于构建桌面应用程序的GUI(图形用户界面)工具包,它是Java Foundation Classes (JFC)的一部分。本项目是一个利用Swing开发的...

    java基于Swing组件的GUI设计

    在"java基于Swing组件的GUI设计"这个主题中,我们将深入探讨如何利用Swing进行GUI开发。 首先,Swing组件是轻量级的,它们大部分是用Java实现的,这使得Swing应用程序可以在不同的操作系统上保持一致的外观和行为。...

    基于Java Swing的贪吃蛇游戏.zip

    基于Java Swing的贪吃蛇游戏.zip基于Java Swing的贪吃蛇游戏.zip 基于Java Swing的贪吃蛇游戏.zip基于Java Swing的贪吃蛇游戏.zip 基于Java Swing的贪吃蛇游戏.zip基于Java Swing的贪吃蛇游戏.zip 基于Java Swing的...

    基于SWING+JAVAFX的MP3播放器

    【标题】:“基于SWING+JAVAFX的MP3播放器” 在Java编程环境中,SWING和JAVAFX是两种常用的图形用户界面(GUI)工具包,用于构建桌面应用程序。本项目结合了两者,创建了一个功能完备的MP3播放器。这种设计方式充分...

    基于Java Swing的汽车租赁平台

    【Java Swing】 Java Swing是Java AWT(Abstract Window Toolkit)库的一部分,提供了一套图形用户界面(GUI)组件,用于构建桌面应用。Swing在AWT的基础上进行了扩展,提供了更多的功能和更好的性能。它使用轻量级...

    基于swing框架的桌面学生管理

    在这个特定的项目“基于Swing框架的桌面学生管理”中,我们看到的是一个利用Swing构建的桌面应用,主要目的是为了实现对学生信息的有效管理,包括添加、删除、修改和查询等基本操作。 Swing框架是Java Foundation ...

    Java课程设计-基于swing的ATM智能柜员机带GUI界面(带实验报告).rar

    3. **事件处理**: Swing中的事件处理机制是基于监听器模式的。例如,当用户点击“取款”按钮时,系统需要触发一个事件,执行相应的取款逻辑。这需要定义事件监听器,并在事件触发时调用相应的方法。 4. **MVC设计...

    基于Java Swing的打砖块游戏.zip

    基于Java Swing的打砖块游戏.zip基于Java Swing的打砖块游戏.zip 基于Java Swing的打砖块游戏.zip基于Java Swing的打砖块游戏.zip 基于Java Swing的打砖块游戏.zip基于Java Swing的打砖块游戏.zip 基于Java Swing的...

    基于java swing的在线餐馆订餐系统

    基于java swing的餐馆订餐系统,用的是mysql5.6数据库(Navicat界面化),实现管理员和用户两个角色模块,可注册、登陆。百分百可运行,大二做的,可做期末大作业,附带报告(技术有限,报告水平不是很高,仅供参考...

    基于Java,Swing的2048小游戏.zip

    基于Java,Swing的2048小游戏.zip基于Java,Swing的2048小游戏.zip基于Java,Swing的2048小游戏.zip基于Java,Swing的2048小游戏.zip基于Java,Swing的2048小游戏.zip基于Java,Swing的2048小游戏.zip基于Java,...

Global site tag (gtag.js) - Google Analytics