ShowOffpublic class ShowOff extends Component
Fields Summary |
---|
private BufferedImage | mImage | private Font | mFont | private String | mMessage | private int | mSplit | private TextLayout | mLayout |
Constructors Summary |
---|
public ShowOff(String filename, String message, int split)
// Get the specified image.
InputStream in = getClass().getResourceAsStream(filename);
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(in);
mImage = decoder.decodeAsBufferedImage();
in.close();
// Create a font.
mFont = new Font("Serif", Font.PLAIN, 116);
// Save the message and split.
mMessage = message;
mSplit = split;
// Set our size to match the image's size.
setSize((int)mImage.getWidth(), (int)mImage.getHeight());
|
Methods Summary |
---|
protected void | drawBackground(java.awt.Graphics2D g2)
// Draw circles of different colors.
int side = 45;
int width = getSize().width;
int height = getSize().height;
Color[] colors = { Color.yellow, Color.cyan, Color.orange,
Color.pink, Color.magenta, Color.lightGray };
for (int y = 0; y < height; y += side) {
for (int x = 0; x < width; x += side) {
Ellipse2D ellipse = new Ellipse2D.Float(x, y, side, side);
int index = (x + y) / side % colors.length;
g2.setPaint(colors[index]);
g2.fill(ellipse);
}
}
| protected float | drawBoxedString(java.awt.Graphics2D g2, java.lang.String s, java.awt.Color c1, java.awt.Color c2, double x)
// Calculate the width of the string.
FontRenderContext frc = g2.getFontRenderContext();
TextLayout subLayout = new TextLayout(s, mFont, frc);
float advance = subLayout.getAdvance();
// Fill the background rectangle with a gradient.
GradientPaint gradient = new GradientPaint((float)x, 0, c1,
(float)(x + advance), 0, c2);
g2.setPaint(gradient);
Rectangle2D bounds = mLayout.getBounds();
Rectangle2D back = new Rectangle2D.Double(x, 0,
advance, bounds.getHeight());
g2.fill(back);
// Draw the string over the gradient rectangle.
g2.setPaint(Color.white);
g2.setFont(mFont);
g2.drawString(s, (float)x, (float)-bounds.getY());
return advance;
| protected void | drawImageMosaic(java.awt.Graphics2D g2)
// Break the image up into tiles. Draw each
// tile with its own transparency, allowing
// the background to show through to varying
// degrees.
int side = 36;
int width = mImage.getWidth();
int height = mImage.getHeight();
for (int y = 0; y < height; y += side) {
for (int x = 0; x < width; x += side) {
// Calculate an appropriate transparency value.
float xBias = (float)x / (float)width;
float yBias = (float)y / (float)height;
float alpha = 1.0f - Math.abs(xBias - yBias);
g2.setComposite(AlphaComposite.getInstance(
AlphaComposite.SRC_OVER, alpha));
// Draw the subimage.
int w = Math.min(side, width - x);
int h = Math.min(side, height - y);
BufferedImage tile = mImage.getSubimage(x, y, w, h);
g2.drawImage(tile, x, y, null);
}
}
// Reset the composite.
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
| protected void | drawString(java.awt.Graphics2D g2, double x, double y, double theta)
// Transform to the requested location.
g2.translate(x, y);
// Rotate by the requested angle.
g2.rotate(theta);
// Draw the first part of the string.
String first = mMessage.substring(0, mSplit);
float width = drawBoxedString(g2, first, Color.white, Color.red, 0);
// Draw the second part of the string.
String second = mMessage.substring(mSplit);
drawBoxedString(g2, second, Color.blue, Color.white, width);
// Undo the transformations.
g2.rotate(-theta);
g2.translate(-x, -y);
| protected void | drawText(java.awt.Graphics2D g2)
// Find the bounds of the entire string.
FontRenderContext frc = g2.getFontRenderContext();
mLayout = new TextLayout(mMessage, mFont, frc);
// Find the dimensions of this component.
int width = getSize().width;
int height = getSize().height;
// Place the first full string, horizontally centered,
// at the bottom of the component.
Rectangle2D bounds = mLayout.getBounds();
double x = (width - bounds.getWidth()) / 2;
double y = height - bounds.getHeight();
drawString(g2, x, y, 0);
// Now draw a second version, anchored to the right side
// of the component and rotated by -PI / 2.
drawString(g2, width - bounds.getHeight(), y, -Math.PI / 2);
| public static void | main(java.lang.String[] args)
try {
// The image is loaded either from this
// default filename or the first command-
// line argument.
// The second command-line argument specifies
// what string will be displayed. The third
// specifies at what point in the string the
// background color will change.
String filename = "Raphael.jpg";
String message = "Java2D";
int split = 4;
if (args.length > 0) filename = args[0];
if (args.length > 1) message = args[1];
if (args.length > 2) split = Integer.parseInt(args[2]);
ApplicationFrame f = new ApplicationFrame("ShowOff v1.0");
f.setLayout(new BorderLayout());
ShowOff showOff = new ShowOff(filename, message, split);
f.add(showOff, BorderLayout.CENTER);
f.setSize(f.getPreferredSize());
f.center();
f.setResizable(false);
f.setVisible(true);
}
catch (Exception e) {
System.out.println(e);
System.exit(0);
}
| public void | paint(java.awt.Graphics g)
Graphics2D g2 = (Graphics2D)g;
// Turn on antialiasing.
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
drawBackground(g2);
drawImageMosaic(g2);
drawText(g2);
|
|