Bonjour à tous, j'ai cherché en vain, sur les forums etc...mais j'ai rien trouvé alors je poste ici ma question.
Voilà je souhaite afficher une image dont on a préalablement fait une rotation.
voici le code :
Le problème, c'est que j'ai droit à une erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 BufferedImage image = ImageIO.read(new File(nomImage)); image=rotation(image, 90); g.drawImage(image, 0, 0, null);
Mon image est une png. J'ai essayé avec des jpg, et cela fonctionne !
Code : Sélectionner tout - Visualiser dans une fenêtre à part Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Unknown image type 0
Ce qui m'étonne le plus, c'est qu'une buffered image est indépendante du type de l'image (d'après ce que j'ai pu lire).
Voyez-vous d'où viendrais le problème par chance ?
Par avance merci.
EDIT :
Pour info, voici la methode de rotation (trouvée sur internet)
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 public BufferedImage rotation(BufferedImage bi, int degrees) { degrees = degrees % 360; if (degrees > 180) degrees = 180 - degrees; double angle = (degrees * Math.PI) / 180.0f; if (angle == 0.0) return bi; // TODO une vrai rotation pour calculer la taille exacte de l'image // après rotation int sx = bi.getWidth(); int sy = bi.getHeight(); if (degrees == 90 || degrees == -90) { sx = bi.getHeight(); sy = bi.getWidth(); } BufferedImage rot = new BufferedImage(sx, sy, bi.getType()); AffineTransform at = new AffineTransform(); at.translate(sx / 2, sy / 2); at.rotate(angle); at.translate(-bi.getWidth() / 2, -bi.getHeight() / 2); AffineTransformOp ato = new AffineTransformOp(at, AffineTransformOp.TYPE_NEAREST_NEIGHBOR); return ato.filter(bi, rot); }
Partager