1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| /*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package test;
import java.awt.AlphaComposite;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Stroke;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.text.MessageFormat;
import javax.swing.JPanel;
/**
*
* @author fabriceb
*/
public class ImagePanel extends JPanel {
public static final double PI2 = 2 * Math.PI;
private BufferedImage image;
private double angle = 0;
public ImagePanel(BufferedImage image) {
this.image = image;
}
public void setAngle(double value) {
angle = value % PI2;
repaint();
}
public double getAngle() {
return angle;
}
private Stroke stroke = new BasicStroke(3.0f);
/**
* {@inheritDoc}
*/
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int width = getWidth();
int height = getHeight();
if (image == null || width == 0 || height == 0) {
return;
}
Graphics2D g2d = (Graphics2D) g.create();
try {
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2d.setColor(Color.BLACK);
g2d.drawString(MessageFormat.format("Radians: {0}", angle), 10, 10);
g2d.drawString(MessageFormat.format("Degrees: {0}", 360 * angle / PI2), 10, 20);
g2d.translate(width / 2.0, height / 2.0);
int dx = -image.getWidth() / 2;
int dy = -image.getHeight() / 2;
if (angle % PI2 != 0) {
AffineTransform transform = AffineTransform.getRotateInstance(angle);
g2d.transform(transform);
g2d.drawImage(image, dx, dy, null);
transform = AffineTransform.getRotateInstance(-angle);
g2d.transform(transform);
g2d.setComposite(AlphaComposite.SrcOver.derive(0.3f));
}
g2d.drawImage(image, dx, dy, null);
g2d.setComposite(AlphaComposite.SrcOver);
g2d.setStroke(stroke);
g2d.setColor(Color.GREEN);
g2d.drawLine(0, 0, 100, 0);
g2d.drawLine(100, 0, 90, 10);
g2d.drawLine(100, 0, 90, -10);
g2d.setColor(Color.RED);
g2d.drawLine(0, 0, 0, 100);
g2d.drawLine(0, 100, 10, 90);
g2d.drawLine(0, 100, -10, 90);
} finally {
g2d.dispose();
}
}
} |
Partager