Korzystam z platformy .NET (wypróbowałem 3.5 & 4.0), aby załadować plik .TIFF i zapisać go jako .PNG. Oczekuję dwóch kolejnych wywołań do metody Save() (przy użyciu tego samego pliku TIFF), aby utworzyć ten sam plik PNG. Wytworzone pliki są "czasami" inne.Metoda .NET Image.Save tworzy nieprzewijalne wyniki w 64-bitowym systemie Windows
C# kod pokazuje problem:
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);
}
PokaŜe 'diff w iteracji 8, 32, 33, 73 114, 155, 196 w systemie Windows 64, podczas gdy nie są wyświetlane żadne błędy na komputerach 32-bitowych. (Używam celu x86, z celem x64 jest gorzej: różnica w iteracji 12, 13, 14, 15, ...)
Czy istnieje sposób na uzyskanie powtarzalnego wyniku z Save()?
Próbka obrazu można znaleźć na tej FTP site
Istnieją różne ustawienia, które idą do kompresji pliku i może być optymalizacja dla jakiegoś czynnika w czasie wykonywania. Na przykład coś takiego jak rozmiar słownika może wpływać na rozmiar skompresowanego wyjścia, ale nadal daje takie same zdekompresowane dane. Zatem twoje obrazy są wciąż takie same, ale mogły zostać zoptymalizowane nieco inaczej. Prawdopodobnie budowanie na 64-bitowe daje różne ustawienia pod maską. Możesz przyjrzeć się ustawieniom enkodera dla Save Overloads, ale nie widziałem niczego poza ręką, co spowodowałoby, że skompresowany wynik byłby deterministyczny. – mafafu
Dzięki za komentarz. Ja też uważałem, że obrazy powinny być takie same w pamięci (tylko pliki .png różnią się). Ale posunąłem się nawet do napisania funkcji odczytywania obrazów jako BMP, konwertowania na tablicę bajtową i - są różne (chociaż wizualne obrazy nie różnią się). Odkryłem również, że problem występuje tylko w przypadku stosunkowo dużych obrazów (w moim przypadku około 2600 × 2600 pikseli). Próbowałem również z bibliotekami innych firm, takimi jak FreeImage - ten sam problem: deterministyczny na poziomie 32-bitowym, a nie na 64-bitowym. – werner
Czy możesz zamieścić link do tego obrazu F1.tif pls? – avs099