java - 翻转图像

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

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

最佳答案

如果尚不知道,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。这实际上并不是任何额外的时间,它只是强制您的代码等待最后一个阶段完成才能获取宽度和高度。

关于java - 翻转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5615365/

相关文章:

c# - 读取单色位图像素颜色

java - 随机返回真或假

java - 如何确定java中的数据库约束冲突?

java - 无法运行 jar 文件,也无法在 Cmd 中运行

ios - 无法在单元格中获取 imageview 的下载 url

html - 带样式的 body 标签中的全宽 img

android - 如何检测两个图像 "collide"?

java - 如何重叠java图形和图像并使其看起来漂亮?

java - JPanel 中的重绘查询

java - 将文本框宽度设置为剩余宽度