繁体   English   中英

Java ImageIO声明图像

[英]Java ImageIO claims image

我正在开发一个不时刷新图像的应用程序。 我这样做是为了可以在外部进行更改。 我正在使用ImageIO.read(path)读取图像文件。

现在,当我想用​​我的paint.NET更改图像并尝试保存(覆盖)图像时,paint.NET会引发IOException。 这可能是因为ImageIO在进程运行时只是声称该映像是他的。 但这就是我的想法。

代码在这里:

public int width, height;
public int[] pixels;

public Sprite(String ref) {
    try {
        BufferedImage image = ImageIO.read(new FileInputStream(ref));
        width = image.getWidth();
        height = image.getHeight();
        pixels = new int[width * height];
        pixels = image.getRGB(0, 0, width, height, pixels, 0, width);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

有人知道如何解决这个问题吗?

谢谢!

在Windows上(假设您使用的是Paint.NET,我假设您在Windows上),将文件保存起来特别成问题,因为它将阻止其他应用程序写入该文件。 这很可能是您遇到的问题。

打开流时,就像在这里一样:

new FileInputStream(ref);

您获得一个本机文件指针。 您有责任在使用后再次将其关闭,以释放文件指针。 现在, ImageIO.read(InputStream) 应该为您关闭流,但是在某些情况下和某些Java版本中,存在与此相关的错误。 如果未正确关闭流,则在最坏的情况下,Java进程将保留此文件指针,直到Java进程终止。

好消息是,如果您只是将代码更改为:

BufferedImage image = ImageIO.read(new File(ref));

然后ImageIO将始终照顾流的打开和关闭。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM