Bonjour,
Je cherche a redimensionner une image en java pour qu'elle rentre dans un JPanel. J'ai essayé avec getScaledInstance mais il ne change absolument pas la taille de l'image a l'affichage.
Merci d'avance pour vos reponses
Version imprimable
Bonjour,
Je cherche a redimensionner une image en java pour qu'elle rentre dans un JPanel. J'ai essayé avec getScaledInstance mais il ne change absolument pas la taille de l'image a l'affichage.
Merci d'avance pour vos reponses
Tu peux utiliser un JXImagePanel :
http://swinglabs.org/
http://www-igm.univ-mlv.fr/~dr/XPOSE...gePanelExample
Tu peux aussi surcharger la méthode paint component et dessiner ton image avec drawImage(...) (méthode de la classe Graphics)
Bah, tu implémentes tout à la main, petit flémard :mrgreen:
Tu as de la chance, j'ai résolu pas mal de petits bugs zujourdh'ui. Sinon, je t'aurai envoyé boulet! :mouarf:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 /** * Effectue une redimensionnement de l'image * @param image L'image à redimensionner * @param targetSizeX La largeur de l'image cible * @param targetSizeY La hauteur de l'image cible * @return L'image réduite ou agrandie */ public final static BufferedImage scale(BufferedImage image, int targetSizeX, int targetSizeY) { if (image == null || targetSizeX == 0 || targetSizeY == 0) return null; double horizontalScaleValue = ((double) targetSizeX / image.getWidth()); double verticalScaleValue = ((double) targetSizeY / image.getHeight()); AffineTransform scaler = new AffineTransform(); scaler.scale(horizontalScaleValue, verticalScaleValue); AffineTransformOp op = new AffineTransformOp(scaler, AffineTransformOp.TYPE_BILINEAR); BufferedImage scaledImage = new BufferedImage(targetSizeX, targetSizeY, BufferedImage.TYPE_INT_ARGB); scaler = null; return op.filter(image, scaledImage); }
CU
Billy
tu refait le boulot du drawImage(...), à mon avis, c'est pas utile ;)
Ouep possible!!! :P mais quand on ne sait pas, on cherche 5-10minutes, et si on ne trouve pas on le code soi-même :)
Je savais qu'une telle méthode existe (normal), mais je ne savais pas que c'était celle là! :aie:
Merci pour toutes vos reponses, finalement ce n'etait pas grand chose : je ne pouvais pas redimensionner directement la variable j'ai donc du par une variable temporaire.
Seulement j'ai un autre probleme :P
En fait je cherche a selectionner une partie de l'image. J'utilise donc les mouseEvents. Mais ceux qui m'interressent ne repondent pas (MousePressed et MouseReleased) alors que MouseDragged et MouseMoved repondent tres bien. J'ai pas mal cherché sur internet mais je tombe toujours sur la meme syntaxe que la mienne. Peut-etre l'un de vous a deja eu ce probleme?
probablement car tu as fais :
au lieu de :Code:addMouseMotionListener(listener);
Code:addMouseListener(listener);
Non ca ca ne change rien :?
Peut-etre qu'un bout de code aiderait :
et les reponses aux evenements sont dans un fichier SelectionRubiksCode:
1
2
3
4
5
6
7
8
9
10
11 public class AfficheImg extends JPanel{ public Image myimg; public int x0, x1, y0, y1; AfficheImg(String img){ super(); this.addMouseListener(new SelectionRubiks()); //.... }
Code:
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 public class SelectionRubiks extends MouseInputAdapter{ private AfficheImg grille; public void MouseClicked(MouseEvent e){ } public void MousePressed(MouseEvent e){ grille.x0 = e.getX(); grille.y0 = e.getY(); System.out.println(grille.x0 + " " + grille.y0); } public void MouseReleased(MouseEvent e){ grille.x1 = e.getX(); grille.y1 = e.getY(); System.out.println(grille.x1 + " " + grille.y1); Image tmp = grille.myimg; grille.myimg=Toolkit.getDefaultToolkit().createImage( new FilteredImageSource((tmp).getSource(), new CropImageFilter(grille.x1,grille.y1,Math.abs( grille.x1-grille.x0),Math.abs(grille.y1-grille.y0)))); grille.repaint(); } public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseDragged(MouseEvent e) {} public void mouseMoved(MouseEvent e) {} }
Tes methodes... leur nom n'est pas correct c'est mouseClicked() pas MouseClicked(), respectivement pour les autres.
Merci beaucoup!! Comme quoi les erreurs les plus petites sont souvent les plus chiantes.