水平翻转BufferedImage

时间:2016-06-08 15:01:46

标签: java bufferedimage

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

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;
    }

2 个答案:

答案 0 :(得分: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;
}