IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

2D Java Discussion :

Problème avec redimesionnement image...


Sujet :

2D Java

  1. #1
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut Problème avec redimesionnement image...
    Bonsoir,

    dans mon appli, des qu'une certaine condition est remplie, j'ajoute un JPanel avec une image à l'intérieur à un JDesktopPane et je redimensionne l'image mais j'ai 2 problèmes :
    • 1. L'image ne se redimensionne pas comme il faut
      2. Des qu'il doit afficher le deuxième JPanel, il me met le message d'erreur suivant :
      Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space


    Je me demande si c'est un problème de surcharge de la mémoire ou quelque chose du genre...

    voici le code ou j'ajoute mon JPanel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Desktop.add(getJPanel(index,pack));
    voici celui qui crée les JPanel :
    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
    private JPanel getJPanel(int index,int pack) {
    		short colonne = 0;
    		short ligne = 0;
    		int panelHeight = 110;
    		int panelWidth = 90;
    		double scaleValue = 1;
     
    		if(index < 5){colonne = (short)index;ligne = 0;}
    		else if(index < 10){colonne =  (short)(index-5);ligne = 1;}
    		else if(index < 15){colonne = 0;ligne = 2;}
     
    		BufferedImage image = loader.loadImage("pack"+pack+"/"+index+".jpg");
     
    		if(image.getWidth() > image.getHeight())scaleValue = image.getWidth() / panelWidth;
    		if(image.getHeight() > image.getWidth())scaleValue = image.getHeight() / panelHeight;
     
    		BufferedImage imageScaled = scale(image,scaleValue);
     
    		if (panels[colonne][ligne] == null) {
    			panels[colonne][ligne] = new ImagePanel(imageScaled);
    			panels[colonne][ligne].setBounds(new java.awt.Rectangle(30+(100*colonne),45+(120*ligne),panelWidth,panelHeight));
    		}
    		return panels[colonne][ligne];
    	}
    voici la classe qui construit un JPanel avec une image dedans :
    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
    public final class ImagePanel extends JPanel { 
    	  public static final String IMAGE_PROPERTY = "ImagePanel.image"; 
    	  private InnerListener innerListener = new InnerListener(); 
     
    	  public ImagePanel(Image image) { 
    	    super(); 
    	    addPropertyChangeListener(IMAGE_PROPERTY, innerListener); 
    	    setImage(image); 
    	  } 
     
    	  public void dispose() { 
    	    removePropertyChangeListener(IMAGE_PROPERTY, innerListener); 
    	    innerListener = null; 
    	    setImage(null); 
    	  } 
     
    	  public void setImage(Image image){ putClientProperty(IMAGE_PROPERTY, image);} 
     
    	  public Image getImage(){ return (Image) getClientProperty(IMAGE_PROPERTY);} 
     
    	  protected void paintComponent(Graphics graphics) { 
    	    super.paintComponent(graphics); 
    	    Image image = getImage(); 
    	    if (image != null) { 
    	      graphics.drawImage(image, 0, 0, null); 
    	    } 
    	  } 
     
    	private class InnerListener implements PropertyChangeListener { 
    		public void propertyChange(PropertyChangeEvent event) { 
    			String property = event.getPropertyName(); 
    			if (property.equals(IMAGE_PROPERTY)) { 
    				Image image = getImage(); 
    				int width = 0; 
    				int height = 0; 
    				if (image != null) { 
    					width = image.getWidth(null); 
    					height = image.getHeight(null); 
    				} 
    				Dimension size = new Dimension(width, height); 
    				setPreferredSize(size); 
    				setMinimumSize(size); 
    				repaint(); 
    			} 
    		} 
    	} 
    }
    et enfin le code que j'emploie pour redimensionner mon image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public static BufferedImage scale(BufferedImage bi, double scaleValue) {
            AffineTransform tx = new AffineTransform();
            tx.scale(scaleValue, scaleValue);
            AffineTransformOp op = new AffineTransformOp(tx,
                    AffineTransformOp.TYPE_BILINEAR);
            BufferedImage biNew = new BufferedImage( (int) (bi.getWidth() * scaleValue),
                    (int) (bi.getHeight() * scaleValue),
                    bi.getType());
            return op.filter(bi, biNew);
    	}
    Si vous avez des idées sur d'ou vient les erreurs ou alors sur comment optimisez ce code, j'en serai fort aise

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    our une méthode qui marche et est rapide tu peux aller voir le post de gfx dans ce sujet: http://www.developpez.net/forums/vie....php?p=2384615
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    merci ca marche vraiment nickel

  4. #4
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    de la par de gfx il ne faut pas s'attebdre à moins......
    Petit tag résolu???
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  5. #5
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    le petit tag est déja fait

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FPDF] problème avec les images dans un tableau dynamique
    Par GADSN dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 08/04/2009, 11h11
  2. [IE] Problème avec background-image dans un TR?!
    Par Danny Blue dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 05/12/2007, 17h29
  3. problème avec les images
    Par wind_vinch dans le forum VB.NET
    Réponses: 9
    Dernier message: 28/03/2007, 22h23
  4. Problème avec insertion image
    Par technopole dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 2
    Dernier message: 26/06/2006, 21h45
  5. TreeView - Problème avec les images
    Par LoicH dans le forum C++Builder
    Réponses: 4
    Dernier message: 21/06/2005, 18h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo