Je me suis largement inspiré d'un code trouvé sur un topic de ce forum pour réaliser des rotation d'images.
Je l'ai inclu dans une classe me permettant de manipuler des images.
La rotation fonctionne, mais imposible ensuite de dépacer mon ImagePanel. Pourquoi ???

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
 
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
 
public class ImagePanel extends JPanel
{
    private BufferedImage image;
    private int w;  	// largeur de l'image
    private int h;  	// hauteur de l'image
/**
* Le constructeur :
* @param filePath le fichier de l'image.
* @param x coordonnée x du coin supérieur gauche.
* @param y coordonnée y du coin supérieur gauche.
* @param width largeur de l'image.
* @param height hauteur de l'image.
*/
    public ImagePanel(String filePath, int x, int y, int width, int height)
    {
        super(null, true);
		File fileImg = new File(filePath);
        try {
            image = ImageIO.read(fileImg);
        } catch (IOException e) {
            image = null;
            System.err.println("Fichier invalide");
        }
 
		if( width<=0 && height<=0){
			w = image.getWidth(this);
			h = image.getHeight(this);
		} else {
        	w = width;
        	h = height;
		}
		setBounds(x, y, w, h);
		//setOpaque(false);
		setBackground(Color.red );
        setVisible(true);
    }
 
	/**
        * ImagePanel au dimensions de l'image originale
        * @param filePath Chemin l'image.
        * @param x coordonnée x du coin supérieur gauche.
        * @param y coordonnée y du coin supérieur gauche.
        */
	public ImagePanel(String filePath, int x, int y)
	{
		this( filePath, x, y, 0, 0);
	}
 
	/**
         * Applique une rotation de <code>scale</code> radians à la propriété <code>image</code>
         * @param scale Angle de rotation (max: 2*pi)
         */
	public void rotate(double scale)
	{
		double sinA = Math.sin(scale);
 
		AffineTransform tx = new AffineTransform();
		tx.rotate(scale, this.image.getWidth() / 2, this.image.getHeight() / 2);
		AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
 
		Rectangle rect = op.getBounds2D(this.image).getBounds();
		tx.translate(sinA * rect.getX(), -sinA * rect.getY());
		op = new AffineTransformOp(tx,AffineTransformOp.TYPE_BILINEAR);
 
		this.image = op.filter(this.image, op.createCompatibleDestImage(this.image, null) );
		this.setBounds( new Rectangle(this.image.getWidth(), this.image.getHeight()) );
		this.w = this.image.getWidth();
		this.w = this.image.getWidth();
		this.h = this.image.getHeight();
	}
 
/**
* Gere l'affichage graphique du JPanel, ainsi que le refraichissement.
*/
    public void paint(Graphics g)
    {
		g.drawImage(image, 0, 0, w, h, null);
		g.drawRect(0,0,w+1,h+1);
    }
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
...
ImagePanel img = new ImagePanel("img.gif",100,100);
menu.add( img );
img.rotate(3.14);
img.setAlignmentX(400);
img.setAlignmentY(500);
Aucun déplacement de mon image (bien affichée à 180°)

Merci d'avance.







[Modéré par Didier]
Ajout de tag dans le titre
Lire les règles du forum : Règles du forum Java