gpt4 book ai didi

Javax ImageIO IIOException 显然没有原因

转载 作者:行者123 更新时间:2023-12-01 19:18:01 28 4
gpt4 key购买 nike

大家好,我遇到了 Java 问题。对于我的高级研究类(class),我已经基本完成,但我只需要分析我生成的图像中的一些数据。我不想将其标记为家庭作业,因为它不是任何必需作业的一部分......这是我自己想出的来收集结果的东西。我编写了一个程序来逐像素比较两个图像。它对两个目录中的所有 .bmp 文件执行此操作。现在,我的程序将文件名读取到字符串数组中,并且检查了所有文件名的值,因此我知道目录和文件名最初可以正常访问。这是有问题的代码:

    public static void main(String[]args) throws IOException
{
File actualDir = new File("C:\\Users\\Rowe\\Desktop\\testExpect");
String actualFiles[] = actualDir.list();
File expectedDir = new File("C:\\Users\\Rowe\\Desktop\\testExpect2");
String expectedFiles[] = expectedDir.list();
int[][] stats = new int[actualFiles.length][6]; // Holds all info
//Columns, Rows, Total, redMatches, shouldaBeenRed, badRed
for(int i = 0; i < actualFiles.length; i++)
{
BufferedImage actualImage = null;
System.out.println(actualFiles[i]); //THIS PRINTS PROPERLY
System.out.println(System.getProperty("user.dir")); //FOR TESTING
actualImage = ImageIO.read(new File("C:\\Users\\Rowe\\Desktop\\testExpect\\"+actualFiles[i])); //ERROR HERE

BufferedImage expectedImage = null;
expectedImage = ImageIO.read(new File("C:\\Users\\Rowe\\Desktop\\testExpect2\\"+expectedFiles[i])); //THIS IMAGE WORKS

...其余代码

现在,当我将目录更改为相同时,程序会运行,并检测到所有像素 100% 相似(正如它应该的那样,所以我知道程序会执行我想要的操作)。错误如下:

线程“主”javax.imageio.IIOException中出现异常:无法读取输入文件!
在 javax.imageio.ImageIO.read(来源未知)
在 PixelCompare.main(PixelCompare.java:22)

我尝试过不同的目录,但没有成功。是否与 .bmp 文件有关?是什么导致一组 BMP 读取良好而另一组无法工作?我可以在其他程序中打开所有必需的文件,因此它们没有损坏。所有属性似乎都是相同的。一个目录是在 Gimp 中手工制作的(这些读起来很好),另一个目录是由基于 Java 的程序生成的。这些可以在 Gimp、Paint、Photoshop 等中读取,但在我的代码中无法读取。

非常感谢任何帮助,谢谢!

编辑:忘记使用恢复的代码...我搞砸了然后发布了一些错误的版本。进行修改以显示其他功能代码的原始问题。进一步描述问题:如果您将两个目录更改为在 testExpect2 文件夹中查找预期文件 [] 中的文件列表,它将成功运行。另外,System.out.println(actualFiles[i]在错误发生之前打印正确的文件名,因此我知道正确的文件正在被读入字符串数组。

最佳答案

new File("C:\\Users\\Rowe\\workspace\\Senior Research\\testExpect"+expectedFiles[i])

让我们将目录缩短为C:\\yourDir。您的代码将产生类似的路径

C:\\yourDirexpectedFiles1.bmp

不是你想要的:

C:\\yourDir\\expectedFiles1.bmp

您忘记了路径分隔符。

使用两个 File-arg 构造函数来 File 会更好:

File actualImageFile = new File(actualDir, expectedFiles[i]);
actualImage = ImageIO.read(actualImageFile);

希望有帮助!

关于Javax ImageIO IIOException 显然没有原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5713096/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com