Метод .NET Image.Save создает невоспроизводимые результаты в 64-разрядной версии Windows

Я использую .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-сайте

8
задан werner 14 June 2012 в 12:52
поделиться