使用Java垂直镜像图像

时间:2015-12-03 04:39:11

标签: java pixmap

我正在尝试垂直镜像我在Java中的pixmap;这是我的代码:

Dimension coords = pixmap.getSize();
for (int x = 0; x < coords.width; x++) {
    for (int y = 0; y < coords.height; y++) {
        Color newest = pixmap.getColor(-x, y);
        pixmap.setColor(x, y, 
            new Color(newest.getRed(),
                      newest.getGreen(),
                      newest.getBlue()));
    }
}

“pixmap”是此实例方法的参数,它本质上是加载的图像。这是我尝试翻转图像时遇到的运行时错误:

  

线程“AWT-EventQueue-0”中的异常   java.lang.ArrayIndexOutOfBoundsException:坐标越界!

任何提示?谢谢!

** 编辑 **

我将代码更改为:

Dimension coords = pixmap.getSize();
for (int x = 0; x < coords.width; x++) {
    for (int y = 0; y < coords.height; y++) {
        Color newest = pixmap.getColor(x, y);
        if (x < coords.width / 2) {
            pixmap.setColor(((((coords.width/2) - x) * 2) + x), y, 
            new Color(newest.getRed(),
                      newest.getGreen(),
                      newest.getBlue()));
        } else {
        pixmap.setColor((x - (((x - (coords.width/2)) * 2))), y, 
            new Color(newest.getRed(),
                      newest.getGreen(),
                      newest.getBlue()));
        }
    }
}

我仍然得到相同的越界异常;不知道我在这段代码上出错了什么^

2 个答案:

答案 0 :(得分:1)

另一种解决方案是使用带有负垂直刻度的Graphics2D为您进行翻转...请注意,这必须与translate(0,-height)结合使用才能将图像重新放回中间。

public static void main(String[] args) throws IOException {
    BufferedImage image = ImageIO.read(new File("test.jpg"));

    BufferedImage mirrored = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB);

    Graphics2D graphics = (Graphics2D)mirrored.getGraphics();
    AffineTransform transform = new AffineTransform();
    transform.setToScale(1, -1);
    transform.translate(0, -image.getHeight());
    graphics.setTransform(transform);
    graphics.drawImage(image, 0, 0, null);

    ImageIO.write(mirrored, "jpg", new File("test-flipped.jpg"));
}

答案 1 :(得分:0)

Java为您提供了一个超出范围的数组异常。您正在尝试访问给定数组大小中不存在的像素。

Color newest = pixmap.getColor(-x,y);

这很可能是问题所在。
像素图是二维数组。虽然我不熟悉这个课程,但可能看起来像这样:

//or whatever your screen is
int pixels[900][900];

话虽如此,您的代码正试图访问负x值坐标数组。

编辑:

Dimension coords = pixmap.getSize();
for (int x = 0; x < coords.width; x++) {
for (int y = 0; y < coords.height; y++) {
    pixmap.setColor(x, y, 
        new Color(newest.getRed(),
                  newest.getGreen(),
                  newest.getBlue()));
}
   }

我将假设此代码将绘制图像,因此

Dimension coords = pixmap.getSize();
for (int x = 0; x < coords.width; x++) {
for (int y = 0; y < coords.height; y++) {
    pixmap.setColor(coords.width-x, y, 
        new Color(newest.getRed(),
                  newest.getGreen(),
                  newest.getBlue()));
}
   }

应绘制在x轴上翻转的图像。你可以从这里找出其余部分