2016-06-08 73 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; 
}