2016-11-09 3 views
2

J'ai essayé de faire pivoter une image en Java en utilisant setRGB et BufferedImage, mais j'obtiens un résultat étrange. Quelqu'un at-il une idée pourquoi? Du côté GAUCHEBufferedImage setRGB résultat étrange

BufferedImage pic1 = ImageIO.read(new File("Images/Input-1.bmp")); 
    int width = pic1.getWidth(null); 
    int height = pic1.getHeight(null); 

    double angle = Math.toRadians(90); 
    double sin = Math.sin(angle); 
    double cos = Math.cos(angle); 
    double x0 = 0.5 * (width - 1);  // point to rotate about 
    double y0 = 0.5 * (height - 1);  // center of image 

    BufferedImage pic2 = pic1; 

    // rotation 
    for (int x = 0; x < width; x++) { 
     for (int y = 0; y < height; y++) { 
      double a = x - x0; 
      double b = y - y0; 
      int xx = (int) (+a * cos - b * sin + x0); 
      int yy = (int) (+a * sin + b * cos + y0); 

      if (xx >= 0 && xx < width && yy >= 0 && yy < height) { 
       pic2.setRGB(x, y, pic1.getRGB(xx, yy)); 
      } 
     } 
    } 
    ImageIO.write(pic2, "bmp", new File("Images/Output2.bmp")); 

est l'image originale et dans la partie droite c'est mon résultat. Avez-vous une idée de comment puis-je le réparer? enter image description here

Merci pour votre aide.

+1

Vous ne pouvez pas faire pivoter une image en place. Vous faites une autre image pivotée séparée. Si vous voulez faire pivoter une image de 90 degrés, vous n'avez pas à effectuer de rotation. Copiez simplement la coordonnée x dans la nouvelle coordonnée y et la coordonnée y dans la nouvelle coordonnée x. –

Répondre

1

Le problème est que vous utilisez la même image en entrée et sortie:

BufferedImage pic2 = pic1;

Vous devez créer une autre image pour pic2, puis effectuer la rotation en copiant les pixels de Image1 à Image2. Notez toutefois que l'utilisation de getRGB et setRGB est terriblement lente. C'est 100 fois plus rapide si vous manipulez les pixels directement.

+0

Merci, je n'ai pas remarqué cette erreur: D maintenant cela fonctionne. et à propos de setRBG et getRGB ... Je sais qu'ils sont si lents .... mais je ne sais pas comment convertir une image en quelque chose comme pixels [] []. J'ai cherché partout sur internet et tout ce que j'ai vu c'est comment obtenir un tableau 1D à partir d'une image, je veux dire quelque chose comme les pixels []. Mais j'ai besoin d'un tableau 2D comme les pixels [] [] et je n'avais aucune idée de comment l'obtenir .... Pouvez-vous m'aider avec et s'il vous plaît? : D –

+0

Dans celui-ci vous créez une image avec les pixels: http://stackoverflow.com/questions/8856569/how-to-get-the-array-of-pixel-values-for-an-image-in -java-using-getrgb –