0

J'essaie actuellement de trouver un code pour obtenir une image à retourner horizontalement en changeant la prise des valeurs rgb de chaque pixel et en les plaçant dans un tableau. J'ai réussi à faire fonctionner cela pour retourner les images verticalement, mais je ne peux pas pour la vie de moi le faire fonctionner horizontalement. Je n'arrive pas à comprendre pourquoi je reçois toujours une exception outOfBoundsException. A noter, ce code fonctionne avec des images carrées, mais pas rectangulaires. Donc, mon code estPourquoi cette boucle me donne-t-elle une exception arrayIndexOutOfBoundsException lors de l'analyse d'une image?

int width = selection.getWidth(); 
int height = selection.getHeight(); 
int rgb[][] = new int[height][width]; 
int rgb2[][] = new int[height][width]; 

for (int i = 0; i < height; i++) { 
    for (int j = 0; j < width; j++) { 
     rgb[i][j] = selection.getRGB(i, j); 
     rgb2[i][j] = selection.getRGB(i, j); 
     System.out.println(j); 
    } 
} 

De débogage en lisant les valeurs de petits tableaux et de tester cette boucle, je ne peux pas comprendre ce qui se passe. J'ai essayé de faire quelques valeurs à la main et il semble qu'il devrait scanner ligne par ligne, en créant un tableau 2d de la même hauteur et la largeur de l'image avec les valeurs de pixels. Cependant, il ne sort jamais de la boucle intérieure. Quelque chose dans la boucle interne est hors limites.

faire Même

for (int i = 0; i < rgb.length; i++) { 
     for (int j = 0; j < rgb[0].length; j++) { 
      rgb[i][j] = selection.getRGB(i, j); 
      rgbTwo[i][j] = selection.getRGB(i, j); 

     } 
    } 

Il dit encore que la coordination est hors des limites. Je ne peux pas comprendre pourquoi cela ne fonctionne pas pour l'horizontal mais c'est pour la verticale, et cela fonctionne pour les carrés mais pas pour les rectangles. Mon retournement vertical fonctionne à la fois pour les carrés et les rectangles.

+0

Il semble que 'i' et' j' sont en arrière. La largeur devrait être premier ne devrait-il pas pour getRGB? – Carcigenicate

Répondre

0

Remplacer getRGB(i, j) par getRGB(j, i). La valeur x vient avant la valeur y. (Voir here)

+0

Merci beaucoup. J'ai eu 3 boucles différentes avec ce problème et c'était le problème. –