如何使用c#.NET以编程方式检测png文件是否已损坏?

时间:2010-08-20 15:39:43

标签: c#

我编写了一个以png格式保存一些位图的代码(使用bitmap.Save()方法)。但是由于某些未知原因,某些图像被保存为损坏的png,因此photoshop无法打开它们。 我需要在我的代码中检测这些png,而不是在photoshop中逐个打开它们。

任何人都能帮助我吗? 有什么方法可以读取创建的png并检查它是否已损坏?

5 个答案:

答案 0 :(得分:3)

完成后,您确定要正确关闭流吗?我认为Bitmap.Save()极不可能导致PNG损坏或者Photoshop无法读取.NET创建的任何PNG。

最简单的尝试是立即在.NET中再次加载它。我会试着深入了解为什么会这样 - 有什么特别腐败的呢?

答案 1 :(得分:1)

尝试将文件读回C#并捕获相应的异常是否有错误(虽然您没有指定损坏的形式 - 例如空白文件并不真正损坏,它只是空白!)

答案 2 :(得分:1)

我会尝试阅读该文件,然后检查标题,看看是否存在所有必需的“块”(IHDR,PLTE,IDAT和IEND)并包含合理的数据。

答案 3 :(得分:0)

Image.FromFile如果无法理解文件的格式,则会抛出OutOfMemoryException。这让我觉得它是一个异常的奇怪选择,但是经验测试和文档同意这是它抛出的例外。

请参阅Image.FromFile Method (String) on the MSDN

答案 4 :(得分:0)

PNG format允许使用不同的压缩,过滤和隔行扫描方法。您是否有较旧版本的Photoshop可能不了解更新的方法?

检查两个PNG文件的标题可能很有用:一个加载,一个不加载。