1

我有一个简单的程序,它遍历图像列表,检查图像的宽度和高度,然后根据结果将它们移动到指定的文件夹。我Image.FromFile(path)用来检查图像,一旦它击中特定图像,我会得到一个OutOfMemoryException.

此错误的潜在原因已在此处讨论

string directory = @"C:\foo\bar\";

foreach (string path in Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly)
.Where(s => s.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase) || s.EndsWith(".tif", StringComparison.OrdinalIgnoreCase)))
{

    //exception thrown here, at Image.FromFile
    Image i = Image.FromFile(path);

    if (i.Width > i.Height)
    {
        i.Dispose();
        File.Move(path, directory + @"horizontal\" + path.Substring(path.LastIndexOf(@"\") + 1));
    }
    else
    {
        i.Dispose();
        File.Move(path, directory + @"vertical\" + path.Substring(path.LastIndexOf(@"\")));
    }

}

我确定错误的原因,它击中的一些 TIFF 图像(出于某种荒谬的原因!)的位深度为 40,这不是有效的 GDI+ 像素格式,此处供参考。

我可以用 try-catch ( OutOfMemoryException) 解决这个问题,但我会检查图像是否有有效的像素格式,而不是希望我不会因为任何其他原因而出现异常。

4

0 回答 0