我创建了一个简单的示例程序(改编自Rotating BufferedImage instances)
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class Main {
public static void main(String[] args) throws IOException {
JFrame frame = new JFrame("Test");
frame.add(new JComponent() {
BufferedImage image = ImageIO.read(new URL(
"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9e/%D0%9D%D0%B5%D1%80%D0%BF%D0%B8%D1%87%D0%B8%D0%B9_%D0%B2%D0%B7%D0%B3%D0%BB%D1%8F%D0%B4.jpg/500px-%D0%9D%D0%B5%D1%80%D0%BF%D0%B8%D1%87%D0%B8%D0%B9_%D0%B2%D0%B7%D0%B3%D0%BB%D1%8F%D0%B4.jpg"));
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
AffineTransform at = new AffineTransform();
at.translate(getWidth() / 2,getHeight() / 2); // draw image in center of frame
// at.scale(0.5,0.5);
at.rotate(Math.toRadians(180));
at.translate(-image.getWidth() / 2,-image.getHeight() / 2); // rotate around the center
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(image,at,null);
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800,800);
frame.setVisible(true);
}
}
,
尝试使用AffineTransform
获取轮换的实例
static void rotate(BufferedImage from,BufferedImage to,double rotate)
{
// rotate around the center
AffineTransform trans
= AffineTransform.getRotateInstance(rotate,from.getWidth()/2,from.getHeight()/2);
AffineTransformOp op = new AffineTransformOp(trans,AffineTransformOp.TYPE_BILINEAR);
op.filter(from,to);
}
或直接drawing
static void rotate(Graphics2d g2d,BufferedImage img,from.getHeight()/2);
g2d.drawImage(img,trans,null);
}
本文链接:https://www.f2er.com/2681676.html