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

avec Java Discussion :

Erreur de "ArrayIndexOutOfBoundsException:"


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut Erreur de "ArrayIndexOutOfBoundsException:"
    Bonjour ,
    j' essaye de mettre une petite image dans une grande, pour cela je colle le tableau de l'une dans l'autre,
    j'ai une erreur à la compilation, ça fait un moment que je suis deçue je ne sais plus quoi faire...

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 255
    at Bitmap.creerIncurstation(bitmap.java:30)

    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
     
    import java.io.*;
    import java.util.Scanner;
     
    public class Bitmap {
        Scanner sc = new Scanner(System.in);
        int[][][]data;
        String nom;
        ImageExterne ie;
        Bitmap(String n) throws IOException, FileNotFoundException { // constructeur pour les images lues
            this.ie=new ImageExterneLue(n);
            this.nom=n;
            this.data=((ImageExterneLue)ie).getTableau();
        }
        Bitmap(int largeur, int hauteur){		// constructeur pour les images créés
            this.data=new int[largeur][hauteur][3];
            for(int x=0;x<this.data.length;x++){  
                        for(int y=0;y<this.data[0].length;y++){
                                this.data[x][y][0]=250;
                                this.data[x][y][1]=250;
                                this.data[x][y][2]=250;
                        }
            }
            this.nom=null;
            this.ie=new ImageExterneCree(this.data);
        }
     
          Bitmap creerIncurstation(Bitmap ImgLue){ 
        	    for(int x=0;x<this.data.length;x++){  
                         for(int y=0;y<this.data[0].length;y++){
                                this.data[x][y][0]=ImgLue.data[x][y][0];
                                this.data[x][y][1]=ImgLue.data[x][y][1];
                                this.data[x][y][2]=ImgLue.data[x][y][2];
                        }
               }
        	    this.nom=null;
        	    this.ie=new ImageExterneCree(this.data);
        	    ((ImageExterneCree)ie).changeImage(this.data); //demande de prendre en compte les changements
        	    return this;
       }
    }

    la class imageExterneCree

    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
    import javax.imageio.*; 
    import java.awt.image.*;
    import java.io.*;
    public class ImageExterneCree extends ImageExterne{
        private int rgbColor(int[] t){
    	return (255<<24)+(t[0]<<16)+(t[1]<<8)+t[2];
        }
        public ImageExterneCree(int[][][] tab){
    	int wid, hei;
    	wid = tab.length;
    	hei = tab[0].length;
    	int[] rgb= new int[wid*hei];
    	for (int i=0; i<rgb.length; i++){
    	    rgb[i]=rgbColor(tab[i%wid][i/wid]);
    	}
    	img = new BufferedImage(wid,hei,BufferedImage.TYPE_INT_RGB);
    	img.setRGB(0,0,wid,hei,rgb,0,wid);
    	this.showImage();
        }	
        public void changeImage(int[][][] tab){
    	int wid, hei;
    	wid = tab.length;
    	hei = tab[0].length;
    	int[] rgb= new int[wid*hei];
    	for (int i=0; i<rgb.length; i++){
    	    rgb[i]=rgbColor(tab[i%wid][i/wid]);
    	}
    	img = new BufferedImage(wid,hei,BufferedImage.TYPE_INT_RGB);
    	img.setRGB(0,0,wid,hei,rgb,0,wid);
    	mp.change(img);
        }
        void sauver(String s) throws IOException{
    	ImageIO.write(img,"jpeg",new File(s));
        }
    }
    la class ImageExterneLue

    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
     
    import javax.imageio.*; 
    import java.awt.image.*;
    import java.io.*;
    public class ImageExterneLue extends ImageExterne{
        public ImageExterneLue(String nomf) throws IOException, 
    					      FileNotFoundException{
    	img = ImageIO.read(new File(nomf));
    	this.showImage();
        }
        public int[][][] getTableau(){
    	int wid, hei;
    	wid = img.getWidth();
    	hei = img.getHeight();
    	int[][][] res = new int[wid][hei][3];
    	int[] rgb = img.getRGB(0,0,wid,hei,null,0,wid);
    	for (int i=0; i<rgb.length; i++){
    	    res[i%wid][i/wid][0]=rgb[i]>>16 & 0xFF;
    	    res[i%wid][i/wid][1]=rgb[i]>>8 & 0xFF;
    	    res[i%wid][i/wid][2]=rgb[i] & 0xFF;
    	}
    	return res;
        }
    }

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 63
    Points : 30
    Points
    30
    Par défaut
    il ne te manque pas une virgule a la ligne 28?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    Bonjour,
    Je pense pas, c'est el nom de ma méthode pour incruster. ou alors c'est l'algo de ma méthode qui ne vas pas.
    Merci

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 63
    Points : 30
    Points
    30
    Par défaut
    Je pensais que ta méthode creerIncrustation prenait 2 paramètres Bitmap et ImgLue et qu'il manquait une virgule entre les deux puisque l'erreur se situe juste apres ligne 30..

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    Je pense que c'est ma méhode qui ne fonctionne pas, puis qu'il me dit que je sort du tableau.
    Si quelqu'un a une piste pour que je sorte de la, il sera le bien venu

  6. #6
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    T'es deux tableaux data et ImgLue font il bien la même taille ?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    mes 2 tableaux sont différents,puisque le but du jeu est d'incruster n' importe quelle image dans une autre, en gérant les problèmes de taille, mais pour le moment je cherche juste à faire fonctionner ma methode une petite dans une grande, mais je demande si j'ai bien fait une incrustation ou simplement ecraser le tableau par un autre.
    Merci

  8. #8
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 44
    Points : 55
    Points
    55
    Par défaut
    Ou est effectué ton appelle de fonction qui pose problème quelle variable est placée à l'intérieur et ou est-elle initialisée ?
    Si possible fournit nous le code de ta fonction main !

    Edit: vérifie que tu ne fais pas d'erreur si ton tableau ImgLue est plus petit que le current bitmap. une erreur sera effectivement générée pour débugger utilise un try catch pour l'erreur tu vera peut-être mieux le fond du problème mais je pense que la piste des deux tableaux l'un plus petit que l'autre est la bonne.

    Bon débugging !

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 63
    Points : 30
    Points
    30
    Par défaut
    Bonjour,
    ceci ne doit pas provoquer l'erreur que tu cherche je suppose mais ta méthode s'appelle creerIncurstation et non creerIncrustation....

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    bonsoir,
    merci mais même en corrigeant l'erreur de frappe, j'ai le même message, je ferai mieux de tout reprendre depuis le début, il y a a truc qui m’échappe ou que j'ai mal compris .

  11. #11
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Euh je débarque un peu sur ton topic là (donc peut être que je vais faire de la redite). Moi de ce que je vois c'est que tu as un java.lang.ArrayIndexOutOfBoundsException: 255 à la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int y=0;y<this.data[0].length;y++){
    Ce qui me fait dire que [y] va jusqu'à 255.

    Ensuite, tu dis que c'est une erreur à la compilation, euh. Généralement ce genre d'erreur arrive lors de l'exécution. Si c'est le cas, tu pourras analyser le problème en mode debug. Un point d'arrêt sur cette ligne et tu vois quand est-ce qu'une valeur dans tes indices de boucle devient aberrant.

    Et au fait dans cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.data=new int[largeur][hauteur][3];
    Que mets tu comme valeur à largeur et hauteur ? Sont-elles inférieures à 255 par exemple ?

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    Bonsoir,
    tout juste, c'est à l'exécution qu'il me mettait l'erreur.
    J'ai regardé ton mail un peu tard,je m'y suis par remise dessus,.
    j'ai essayé de faire autrement, c'est un peu mieux si je puis dire, au lieu de l'incruster i me l'ouvre de nouveau, je n'ai pas d'erreur!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
          void creerIncrustation(Bitmap ImgLue){  	//incrustre pas   
       	   ImgLue.data= ((ImageExterneLue)ie).getTableau(); //recupere le tab de imgLue avec getTableau
       	   int[][][] t=((ImageExterneLue)ie).getTableau(); //je le mets dans t
       	  for(int x=0;x<this.data.length;x++){ //normalement je copie ImgLud dans ImgCree
                        for(int y=0;y<this.data[0].length;y++){
                                this.data[x][y][0]=t[x][y][0];
                                this.data[x][y][1]=t[x][y][1];
                                this.data[x][y][2]=t[x][y][2];
                        }
               }
       	  this.ie=new ImageExterneCree(t); // j'ai ma nouvelle image avec son nouveau tableau
       	  ((ImageExterneCree)ie).changeImage(t);// normalement je doit voir le changement ! marche pas?
       }

    et dans le main j'ai fait comme ça:
    System.out.print("incruster une image:");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mesImages[1].creerIncrustation(mesImages[0]);

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