2016-06-08 74 views
1

我正在使用以下代码水平翻转图像。它可以工作,但图像会同时水平翻转和垂直翻转。 正面朝向的图像现在朝向左侧,但也会垂直翻转。 如何停止垂直翻转? 代码:水平翻转缓冲图像

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

的代码是从这样的回答:http://stackoverflow.com/questions/23457754/how-to -flip-bufferedimage-in-java –

回答

2

因为你正在旋转180度的图像,而不是翻转它。使用AffineTransform.getScaleInstance(-1, 1);代替。

编辑:从这里开始:https://stackoverflow.com/a/9559043/1542532

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

还必须转换图像,因为规模将图像向左移动。

+1

嗨,非常感谢!这也解释了很多关于翻转图像的其他内容。 –

0

我做了一些性能测试,这比使用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; 
}