Поворот изображения в 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); }
Я хочу добавить еще одну переменную к указанной выше функции под названием «угол», так что изображение также поворачивается на указанный угол (drawTank (int x, int y, int angle).
Обновлено с примером
- Как преобразовать изображение в массив байтов и массив байтов в base64 String в android?
- изображение перемещается по hover - проблема непрозрачности хрома
- наложить два изображения в android, чтобы установить изображение
- Как установить маржу ImageView с помощью кода, а не xml
- Android - Как позиционировать View off-screen?
То, что я пытался сделать, это то, что я инициализировал 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)));
Но это на самом деле ничего не делает. : /
- Сделать WPF Image load async
- Java: заполнение BufferedImage прозрачными пикселями
- Зачем «шагать» в конструкторе System.Drawing.Bitmap быть кратным 4?
- Как повернуть изображение в WinForms
- Как программно сохранить изображение с URL-адреса?
- Drawable-hdpi, Drawable-mdpi, Drawable-ldpi Android
- Как получить правильную ориентацию изображения, выбранного из галереи изображений по умолчанию
- Как я могу создать эффект щелчка изображения, как кнопка на Android?
Приоритет имеет значение …
Во втором примере вы применяете поворот ПОСЛЕ того, как вы нарисовали все. Это не то, как работает графика. Сначала нужно применить преобразование, затем все, что следует, будет использовать это преобразование.
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 (у вас уже есть экземпляр). С помощью этого вы можете использовать функцию draw polygon для вычисления точек вашего прямоугольника, что вы можете сделать, используя sin и cos функций в Java.lang.Math
Действительно, вам нужно было бы просто вычислить две точки таким образом, так как вашей отправной точкой была бы вершина 90 gradleусов, из которой вы могли бы вычислить две соседние координаты. Оттуда это просто вопрос сложения и вычитания с точками, которые у вас есть, и ваши значения измерения, чтобы получить последнюю точку котенка в исходной точке.
Я понял бы это для вас и напишу какой-нибудь примерный код, но тогда, что весело оставит вас?