ichiba.ch Download the KAYWA Reader!
En | De | Fr

Feed2Mobile

Le Funes - Rotando una imagen a través de java.awt.geom.AffineTransform


Mediante AffineTransform se puede rotar una imagen dibujada sobre un Graphics.
Esto se debe a que en realidad AffineTransform agrega una transformada al objeto Graphipcs.

Para rotar se pasa a una instancia de AffineTransform a través de rotate(), pasándole el ángulo en radianes y el centro de rotación. Luego esta instancia se asigna al objeto Graphics (debemos asignársela a Graphics2D en realidad)


AffineTransform at = new AffineTransform();
at.rotate(r, 100, 100); //se asigna el angulo y centro de rotacion
((Graphics2D) g).setTransform(at);

Ejemplo

Por ejemplo creamos un panel que muestra un cuadrado girado una determinada cantidad de grados llamada JPanelImagenGiratoria.java:


import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;

public class JPanelImagenGiratoria extends javax.swing.JPanel {

    private int grados = 0;

    public int getGrados() {
        return grados;
    }

    public void setGrados(int grados) {
        this.grados = grados;
        repaint();
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g); //se borra el contenido anterior

        double r = Math.toRadians(grados); //se convierte a radianes lo grados

        AffineTransform at = new AffineTransform();
        at.rotate(r, 100, 100); //se asigna el angulo y centro de rotacion
        ((Graphics2D) g).setTransform(at);

        //se dibuja
        g.setColor(Color.BLUE);
        g.drawRect(50, 50, 100, 100);

    }
}

y un frame para realizar la prueba del panel llamada PruebaPanel.java. Prestar atención al observador de cambios del JSlider agregado mediante addChangeListener():


import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JSlider;

public class PruebaPanel{

    public static void main(String[] args) {
        final JFrame jf = new JFrame("Prueba Imagen Giratoria");
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setSize(200, 250);

        final JPanelImagenGiratoria ig = new JPanelImagenGiratoria();

        final JSlider js = new JSlider(0, 360);
        js.addChangeListener(new javax.swing.event.ChangeListener() {

            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                ig.setGrados(js.getValue());
            }
        });
        js.setValue(0);

        jf.setLayout(new BorderLayout());
        jf.add(ig, BorderLayout.CENTER);
        jf.add(js, BorderLayout.SOUTH);

        jf.setLocationRelativeTo(null);
        jf.setVisible(true);
    }
}

Imágenes:

Más Info

Note: this is how this feed will look on your mobile device.

Get mobile!

This QR Code will let any user whose mobile phone is equipped with a QR Code Reader to easily reach and bookmark the mobile version of «Le Funes»

To add this QR Code to your Blog or Website, simply copy-paste the following Javascript blurb into your Blog template.

Feed2Mobile v1.0-BETA3 CONTACT US: KAYWA // TECHNOPARKSTRASSE 1 // 8005 ZUERICH // SWITZERLAND // info@kaywa.com