[2D特效] 基于Swing的图片倒影特效
javapub
2010-10-13
原文:http://javapub.iteye.com/blog/781654
关键字: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); } 四.源码 附件是完整的程序。 |
相关讨论
相关资源推荐
- Jasper Open Servlet-开源
- C#窗体程序——自定义一个时间类。该类包含小时、分、秒字段和属性,具有将秒增1操作的方法
- org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包含TLD
- at org.apache.jasper.servlet.JspServletWrapper.handleJspException
- Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException
- 关于org.apache.jasper.servlet.JspServletWrapper.handleJspException的解决方法
- org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描....
- org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned f
- 关于Stacktrace:org.apache.jasper.servlet.JspServletWrapper.handleJspException报错
- org.apache.jasper.servlet.TldScanner.scanJars At least one JAR