Bild drehen

Nesselbrand

Bekanntes Mitglied
Code:
import javax.swing.*;
import java.awt.*;

public class Zeichnen extends JPanel
{
    ImageIcon PacMan;

    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        this.setBackground(Color.BLACK);

        PacMan = new ImageIcon("D:\\Programmieren\\Java Projekte\\test #2\\src\\PacMan\\PacMan.png");
        PacMan.paintIcon(this,g,Var.pacX,Var.pacY);
    }
}

Wie kann man das machen, dass das Bild PacMan gedreht wird?
 
x2 = x1*cos(phi) - y1*sin(phi)
y2 = x1*sin(phi) + y1*cos(phi)

x2 und y2: position nach Rotation
x1 und y1: position vor Rotation
phi: Rotationswinkel
 
Java:
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.io.IOException;
import java.net.URL;
import javax.imageio.*;
import javax.swing.*;

public class Test {
    public static class Drawing extends JComponent {
        private BufferedImage img;

        public Drawing(BufferedImage img) { this.img = img; }

        private int degrees = 0;

        public void setDegrees(int degrees) {
            this.degrees = degrees;
            repaint();
        }

        protected void paintComponent(Graphics g) {
            Graphics2D g2=(Graphics2D) g;
            double angle = Math.toRadians(degrees);
            AffineTransform rot = AffineTransform.getRotateInstance(angle);
            rot.concatenate(AffineTransform.getTranslateInstance(
                    -img.getWidth()/2, -img.getHeight()/2));
           
            AffineTransform at = AffineTransform.getTranslateInstance(200,200);
            at.concatenate(rot);
            g2.drawImage(img, at, null);
        }
    }

    public void run() {
        BoundedRangeModel model = new DefaultBoundedRangeModel(0, 0, 0, 359);
        JSlider slider = new JSlider(model);
        Drawing draw = new Drawing(createImage());
        model.addChangeListener(e -> draw.setDegrees(model.getValue()));

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(slider, BorderLayout.SOUTH);
        frame.add(draw);
        frame.setVisible(true);
        frame.setSize(800, 600);
    }

    private BufferedImage createImage() {
        BufferedImage img = new BufferedImage(60, 60, BufferedImage.TYPE_INT_ARGB);
        Graphics g = img.createGraphics();
        g.setColor(Color.RED);
        g.fillRect(10, 10, 40, 40);
        g.dispose();
        return img;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Test().run());
    }
}
 

Neue Themen


Zurück
Oben