按指定的角度在java中旋转图像

这是在给定坐标处绘制形状的函数:

public void drawTank(int x,int y){ int h = 50; int w = 50; graphic.setColor(Color.darkGray); graphic.drawRect(x, y, h, w); graphic.fillRect(x, y, h, w); graphic.setColor(Color.GRAY); graphic.drawRect(x+50, y+20, 35, 10); graphic.fillRect(x+50, y+20, 35, 10); } 

我想在上面的函数中添加一个名为’angle’的变量,这样图像也会旋转指定的角度(drawTank(int x,int y,int angle))。

更新了示例

我试图做的是我初始化Graphics2D并分别更改了我的代码:

 g2D.setColor(Color.darkGray); g2D.drawRect(x, y, h, w); g2D.fillRect(x, y, h, w); g2D.setColor(Color.red); g2D.drawRect(x+50, y+20, 35, 10); g2D.fillRect(x+50, y+20, 35, 10); g2D.rotate((Math.toRadians(angle))); 

但是,这实际上并没有做任何事情。 :/

优先权……

在第二个示例中,您在绘制完所有内容后应用旋转。 这不是图形的工作原理。 您需要先应用转换,然后接下来的所有内容都将使用该转换。

在此处输入图像描述

 public class TestRotateImage { public static void main(String[] args) { new TestRotateImage(); } public TestRotateImage() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception ex) { } JFrame frame = new JFrame("Test"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new TestPane()); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public class TestPane extends JPanel { private JSlider slider; private Rectangle rectangle; public TestPane() { setLayout(new BorderLayout()); rectangle = new Rectangle(0, 0, 100, 100); slider = new JSlider(); slider.setMinimum(0); slider.setMaximum(360); slider.setMinorTickSpacing(5); slider.setMajorTickSpacing(10); slider.setValue(0); add(slider, BorderLayout.SOUTH); slider.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { repaint(); } }); } @Override public Dimension getPreferredSize() { return new Dimension(200, 200); } public double getAngle() { return Math.toRadians(slider.getValue()); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g.create(); g2d.setColor(Color.RED); g2d.drawLine(getWidth() / 2, 0, getWidth() / 2, getHeight()); g2d.drawLine(0, getHeight() / 2, getWidth(), getHeight() / 2); g2d.setColor(Color.BLACK); int x = (getWidth() - rectangle.width) / 2; int y = (getHeight() - rectangle.height) / 2; AffineTransform at = new AffineTransform(); at.setToRotation(getAngle(), x + (rectangle.width / 2), y + (rectangle.height / 2)); at.translate(x, y); g2d.setTransform(at); g2d.draw(rectangle); g2d.dispose(); } } } 

您可能希望了解转换形状,文本和图像以获取更多信息

这是蛮力的方式。 看一下Java.lang.Math和java.awt.Graphics(你已经有了一个实例)这样你可以使用绘制多边形函数计算矩形的点,你可以使用sin和cos来做Java.lang.Math中的函数

实际上,你只需要以这种方式计算两个点,因为你的起点是90度的顶点,你可以从中计算两个相邻的坐标。 从那里开始,只需要使用你拥有的点和你的尺寸值进行一些加法和减法,就可以得到最后一个小点角到你的起点。

我会为你解决这个问题,并编写一些示例代码,但那会有什么乐趣呢?