Comment refléter une image horizontalement en utilisant des tableaux Java 2D?


Salutations gars et filles Je suis tombé sur un problème que je n'arrive pas à comprendre, et les messages similaires ont une structure différente de ce que j'utilise. Par conséquent, j'apprécierais vraiment quelques conseils. Jetons un coup d'œil à ma méthode de miroir horizontal:

  public void  mirrorHorizontal(){
  Pixel[][] pixels = this.getPixels2D();     
  Pixel topPixel = null;     
  Pixel bottomPixel = null;     
  int width = pixels[0].length;     
  for (int row = 0; row < pixels.length / 2; row++){       
      for (int col = 0; col < width; col++){         
          bottomPixel = pixels[row][col];        
          topPixel = pixels[row][col];         
          bottomPixel.setColor(topPixel.getColor());       
      }     
  } }

Permet d'établir que ce code a été fourni pour utiliser et modifier, donc je ferai de mon mieux pour expliquer.

Dans cette boucle for, ce que j'ai fait a été de couper les lignes en deux en plongeant les pixels.longueur par 2 donc je peux atteindre le sommet image en haut, et un sur le fond.

for (int row = 0; row < pixels.length / 2; row++){  

Donc je crois que voici mon problème:

bottomPixel = pixels[row][col];        
topPixel = pixels[row][col];

Je ne sais pas quoi mettre à l'intérieur du bottomPixel [row] [col]

Je crois qu'il doit rendre quelque chose comme ceci:

  1. 1 2 3 4
  2. 5 6 7 8
  3. 5 6 7 8
  4. 1 2 3 4

Cependant, je ne sais pas comment le modifier pour y parvenir.

Cela utilise deux boucles for modifiées et des valeurs différentes pour obtenir des effets similaires à retournement d'un tableau multidimensionnel java par AngryDuck.

Author: Artur, 2016-04-05

1 answers

, Donc dans votre exsample la bottomPixel et topPixel sont exactement les mêmes.

Si j'ai bien compris votre question, cela résoudra votre problème:

for (int row = 0; row < pixels.length / 2; row++){       
  for (int col = 0; col < pixels[0].length; col++){                 
      topPixel = pixels[row][col];  
      bottomPixel = pixels[(pixels.length - 1) - i][col];       
      bottomPixel.setColor(topPixel.getColor());       
  }     
} 

J'ai changé la coordonnée de ligne de bottomPixel afin qu'elle prenne la coordonnée en miroir à partir du bas. Mais cela ne fonctionne que si votre image a exactement pixels.length / 2 lignes.

 0
Author: Dimitrios Begnis, 2016-04-05 20:41:30