Dedetok: My Experiences Notes This page contains my experiences using technology. All of information are were working properly on the time when they wrote. You may use them for any purposes.
Friday, August 9, 2024
java: graphics2d and rotation test
import java.awt.BasicStroke;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class JFrameRotate extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel contentPane;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
JFrameRotate frame = new JFrameRotate();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
int panelWidth=600, panelHeight=600;
/**
* Create the frame.
*/
public JFrameRotate() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(0, 0, panelWidth, panelHeight);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
loadCard();
}
// JFrame: public void paint(Graphics g)
// JPanel: protected void paintComponent(Graphics g)
@Override
public void paint(Graphics g) {
if (bImg!=null) {
//g.drawImage(bImg, xCenter, yCenter, this);
// draw the image
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(bImg, rotate(10), contentPane);
g2d.drawImage(bImg, rotate(45), contentPane);
g2d.drawImage(bImg, rotate(90), contentPane);
g2d.drawImage(bImg, rotate90(), contentPane);
}
}
int strokeImg =1, widthImg=100, heightImg=150;
int xCenter=200, yCenter=300;
BufferedImage bImg;
private void loadCard() {
bImg = new BufferedImage(widthImg,
heightImg, BufferedImage.TYPE_INT_BGR);
Graphics2D g2d = bImg.createGraphics();
g2d.setStroke(new BasicStroke(1)); // 1 pixel
// https://stackoverflow.com/questions/31152233/opening-image-asset-java-jdk-8
String sFName = "/images/KC.png"; // See here to setup image resources
BufferedImage img;
try {
img = ImageIO.read(getClass().getResource(sFName));
g2d.drawImage(img, strokeImg, strokeImg, widthImg-(2*strokeImg),
heightImg-(2*strokeImg), this);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private AffineTransform rotate(int degree) {
double rotationAngle=degree*Math.PI/180;
AffineTransform transform = new AffineTransform();
transform.rotate(rotationAngle, xCenter, yCenter);
//transform.rotate(rotationAngle);
transform.translate(xCenter, yCenter);
return transform;
}
/*
* 90 degree only, keep on position top left
*/
private AffineTransform rotate90() {
double rotationAngle=90*Math.PI/180;
AffineTransform transform = new AffineTransform();
transform.rotate(rotationAngle, xCenter, yCenter);
// yCenter-heightImg = horizontal position
// xCenter: vertical position
transform.translate(xCenter, yCenter-heightImg);
return transform;
}
}