01: package org.zilonis.tool.ext.aerith.g2d;
02:
03: import java.awt.AlphaComposite;
04: import java.awt.Color;
05: import java.awt.GradientPaint;
06: import java.awt.Graphics2D;
07: import java.awt.geom.AffineTransform;
08: import java.awt.geom.Rectangle2D;
09: import java.awt.image.BufferedImage;
10:
11: public final class Reflection {
12: public static BufferedImage createReflectedPicture(
13: BufferedImage avatar, BufferedImage alphaMask) {
14: int avatarWidth = avatar.getWidth();
15: int avatarHeight = avatar.getHeight();
16:
17: BufferedImage buffer = createReflection(avatar, avatarWidth,
18: avatarHeight);
19:
20: applyAlphaMask(buffer, alphaMask, avatarHeight);
21:
22: return buffer;/*.getSubimage(0, 0, avatarWidth, avatarHeight * 3 / 2)*/
23: }
24:
25: private static void applyAlphaMask(BufferedImage buffer,
26: BufferedImage alphaMask, int avatarHeight) {
27:
28: Graphics2D g2 = buffer.createGraphics();
29: g2.setComposite(AlphaComposite.DstOut);
30: g2.drawImage(alphaMask, null, 0, avatarHeight);
31: g2.dispose();
32: }
33:
34: private static BufferedImage createReflection(BufferedImage avatar,
35: int avatarWidth, int avatarHeight) {
36:
37: BufferedImage buffer = new BufferedImage(avatarWidth,
38: avatarHeight * 5 / 3, BufferedImage.TYPE_INT_ARGB);
39: Graphics2D g = buffer.createGraphics();
40:
41: g.drawImage(avatar, null, null);
42: g.translate(0, avatarHeight * 2);
43:
44: AffineTransform reflectTransform = AffineTransform
45: .getScaleInstance(1.0, -1.0);
46: g.drawImage(avatar, reflectTransform, null);
47:
48: g.dispose();
49:
50: return buffer;
51: }
52:
53: public static BufferedImage createGradientMask(int avatarWidth,
54: int avatarHeight) {
55: return createGradientMask(avatarWidth, avatarHeight, 0.7f, 1.0f);
56: }
57:
58: public static BufferedImage createGradientMask(int avatarWidth,
59: int avatarHeight, float opacityStart, float opacityEnd) {
60: BufferedImage gradient = new BufferedImage(avatarWidth,
61: avatarHeight, BufferedImage.TYPE_INT_ARGB);
62: Graphics2D g = gradient.createGraphics();
63: GradientPaint painter = new GradientPaint(0.0f, 0.0f,
64: new Color(1.0f, 1.0f, 1.0f, opacityStart), 0.0f,
65: avatarHeight / 2.0f, new Color(1.0f, 1.0f, 1.0f,
66: opacityEnd));
67: g.setPaint(painter);
68: g.fill(new Rectangle2D.Double(0, 0, avatarWidth, avatarHeight));
69:
70: g.dispose();
71:
72: return gradient;
73: }
74: }
|