Я использую .NET framework (пробовал 3.5 и 4.0), чтобы загрузить файл .TIFF и сохранить его как .PNG. Я ожидаю, что два последующих вызова метода Save() (с использованием одного и того же файла TIFF) создадут один и тот же файл PNG. Однако созданные файлы «иногда» отличаются.
Приведенный ниже код C# показывает проблему:
Image sourceToConvert = Bitmap.FromFile("c:\\tmp\\F1.tif");
sourceToConvert.Save("c:\\tmp\\F1_gen.png", ImageFormat.Png);
for (int i = 0; i < 100; i++)
{
sourceToConvert = Bitmap.FromFile("c:\\tmp\\F1.tif");
sourceToConvert.Save("c:\\tmp\\F1_regen.png", ImageFormat.Png);
if (!CompareFileBytes("c:\\tmp\\F1_gen.png", "c:\\tmp\\F1_regen.png"))
MessageBox.Show("Diff" + i);
}
Это будет отображать «Diff» на итерациях 8, 32, 33, 73, 114, 155, 196 в Windows 64, в то время как на 32-разрядных машинах ошибок не будет. (Я использую цель x86; с целью x64 хуже: diff на итерации 12, 13, 14, 15, ...)
Есть ли способ получить воспроизводимый результат от Save()?
Образец изображения можно найти на этом FTP-сайте