2010-03-19 71 views
0

我们有一个从远程服务器获取图像的过程。大多数时候,我们去好,图像是有效的,我们不超时,等等。然而,每一次,一段时间我们看到这个错误与此类似:在C#中处理损坏的JPEG#

Unhandled Exception: System.Runtime.InteropServices.ExternalException: A generic 
error occurred in GDI+. 
    at System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderPa 
rameters encoderParams) 
    at ConsoleApplication1.Program.Main(String[] args) in C:\images\ConsoleApplic 
ation1\ConsoleApplication1\Program.cs:line 24 

不能够后在当地重现它,我们仔细观察了这幅图像,发现有文物,让我们怀疑是腐败。

创建了一个丑陋的小单元测试,只有有问题的图像,并且无法像预期的那样在Windows 7上重现错误。但是在Windows Server 2008上运行我们的单元测试后,我们每次都会看到这个错误。

有没有办法在写入JPEG时指定jpegs的非严格性?我们可以使用某种检查/修复?

单元测试代码片段:

var r = ReadFile("C:\\images\\ConsoleApplication1\\test.jpg"); 

     using (var imgStream = new MemoryStream(r)) 
     { 
      using (var ms = new MemoryStream()) 
      { 
       var guid = Guid.NewGuid(); 
       var fileName = "C:\\images\\ConsoleApplication1\\t" + guid + ".jpg"; 
       Image.FromStream(imgStream).Save(ms, ImageFormat.Jpeg); 
       using (FileStream fs = File.Create(fileName)) 
       { 
        fs.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length); 
       } 
      } 

     } 

回答

1

AFAIK,不,在解码JPG文件时,没有办法要求GDI +更加宽松。在消费者上传任意JPG文件的任何应用程序中,您会在GDI +异常中始终看到一些这样的通用错误。你可以尝试使用WPF来读取你的图像,但我怀疑它也会反对破坏图像。

0

也许它没有回答你的直接问题,但为什么我就不会你拉形象和它的MD5(或任何其他哈希),可以验证这一形象的correctnes?

+0

在一天结束时,我们仍然需要形象,腐败与否。如果只有一些工件是好的。 – ddango 2010-03-19 19:36:32