У нас есть процесс, который извлекает изображения с удаленного сервера. В большинстве случаев мы готовы к работе, изображения действительны, время ожидания не истекло и т. Д. Однако, каждый раз и некоторое время мы видим эту ошибку, похожую на эту:
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 мы каждый раз видим эту ошибку.
Есть ли способ указать нестрогость для 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);
}
}
}