我们有一个从远程服务器获取图像的过程。大多数时候,我们去好,图像是有效的,我们不超时,等等。然而,每一次,一段时间我们看到这个错误与此类似:在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);
}
}
}
在一天结束时,我们仍然需要形象,腐败与否。如果只有一些工件是好的。 – ddango 2010-03-19 19:36:32