翻转图像

时间:2011-04-10 23:15:10

标签: java image graphics transform flip

我正在创建一个平铺游戏,我需要翻转图像。使用我的代码会产生这个错误:

Exception in thread "main" java.lang.IllegalArgumentException: Width (-1) and height (-1) cannot be <= 0

从这一行:

Image newImage = gc.createCompatibleImage(
        image.getWidth(null),
        image.getHeight(null),
        Transparency.BITMASK);

这是我的编码:

public Image getMirrorImage(Image image) {
    return getScaledImage(image, -1, 1);
}

private Image getScaledImage(Image image, float x, float y) {
    // set up the transform
    AffineTransform transform = new AffineTransform();
    transform.scale(x, y);
    transform.translate(
        (x-1) * image.getWidth(null) / 2,
        (y-1) * image.getHeight(null) / 2);

    // create a transparent (not translucent) image
    Image newImage = gc.createCompatibleImage(
        image.getWidth(null),
        image.getHeight(null),
        Transparency.BITMASK);

    // draw the transformed image
    Graphics2D g = (Graphics2D)newImage.getGraphics();
    g.drawImage(image, transform, null);
    g.dispose();

    return newImage;
}

任何人都可以向我解释一下我可能需要做些什么或者我如何才能使它发挥作用?非常感谢

2 个答案:

答案 0 :(得分:3)

image.getWidth(null)image.getHeight(null)可能会返回-1,如果还不知道的话。图像处理可以同时进行,当你尝试调用这些方法时它可能仍然存在(甚至在本地它也会执行这个IIRC)。这是我之前用过的代码片段,在尝试访问其宽度和高度之前等待加载图像:

private void waitForImage(Image image) {
    Container container = new Container();
    MediaTracker tracker = new MediaTracker(container);
    tracker.addImage(image, 0);
    try {
        tracker.waitForID(0, 1000);
    } catch (Exception e) {
    }
}

我刚试过一次本地测试,一些小图片的等待时间一般为1ms。这不是真正的任何额外时间,只是迫使你的代码等待最后一个阶段完成以获得宽度和高度。

答案 1 :(得分:0)

翻转图像的最简单方法是对其进行负缩放。例如:

g2.drawImage(image, x, y, -width, height, null);

那会垂直翻转它。这将水平翻转:

g2.drawImage(image, x, y, width, -height, null);
相关问题