2016-06-08 2 views
1

J'utilise le code suivant pour retourner une image horizontalement. Cela fonctionne, mais l'image est inversée horizontalement et verticalement en même temps. L'image orientée vers la droite, est maintenant tournée vers la gauche, mais elle est également retournée verticalement. Comment arrêter le basculement vertical? code:Retournement horizontal d'une image buffered

public static BufferedImage createRotated(BufferedImage image) 
    { 
     AffineTransform at = AffineTransform.getRotateInstance(
      Math.PI, image.getWidth()/2, image.getHeight()/2); 
     return createTransformed(image, at); 
    } 

public static BufferedImage createTransformed( BufferedImage image, AffineTransform at) 
    { 
     BufferedImage newImage = new BufferedImage(
      image.getWidth(), image.getHeight(), 
      BufferedImage.TYPE_INT_ARGB); 
     Graphics2D gg = newImage.createGraphics(); 
     gg.transform(at); 
     gg.drawImage(image, 0, 0, null); 
     gg.dispose(); 
     return newImage; 
    } 
+0

Le code est de cette réponse: http://stackoverflow.com/questions/23457754/how-to -flip-bufferedimage-in-java –

Répondre

2

Parce que vous faites pivoter l'image de 180 degrés, pas la retournant. Utilisez à la place le AffineTransform.getScaleInstance(-1, 1);.

EDIT: D'ici: https://stackoverflow.com/a/9559043/1542532

// Flip the image horizontally 
tx = AffineTransform.getScaleInstance(-1, 1); 
tx.translate(-image.getWidth(null), 0); 

Vous devez également traduire l'image parce que l'échelle se déplace l'image vers la gauche.

+1

Salut, Merci beaucoup! Cela a également expliqué beaucoup d'autres choses sur le retournement des images. –

0

J'ai fait quelques tests de performance, ce qui est un peu plus efficace que l'utilisation AffineTransform:

public static BufferedImage flipHoriz(BufferedImage image) { 
    BufferedImage newImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB); 
    Graphics2D gg = newImage.createGraphics(); 
    gg.drawImage(image, image.getHeight(), 0, -image.getWidth(), image.getHeight(), null); 
    gg.dispose(); 
    return newImage; 
}