.NET - Bitmap.Save ignoruje Bitmap.SetResolution w systemie Windows 7

Piszę aplikację .NET 4, która importuje i zapisuje obrazy do drukowania. Ważne jest, aby zapisana rozdzielczość obrazów (wymiary DPI, a nie piksele) była ustawiona na wartość, którą określamy, aby drukowały poprawnie.

Niektóre obrazy, które importujemy, nie mają wartości rozdzielczości (złe EXIF, gdy zostały wygenerowane), więc musimy je poprawić przed ich zapisaniem. Używamy do tego Bitmap.SetResolution. Działa dobrze na XP i Windows 8, ale kiedy piszemy (Bitmap.Save) obrazy na Windows 7, są one zawsze zapisywane z oryginalną rozdzielczością meta info, ignorując SetResolution.

Oto test, który wykonaliśmy, działa na XP i 8, a nie na 7.

string originalFile = @"D:\temp\img\original_img.jpg";
string newFile = @"D:\temp\img\new_img.jpg";

Bitmap bitmap = (Bitmap)Image.FromFile(originalFile);
bitmap.SetResolution(200, 200);
bitmap.Save(newFile, ImageFormat.Jpeg);

Image image = Image.FromFile(newFile);
int dpiX = (int)Math.Round(image.HorizontalResolution, MidpointRounding.ToEven);
int dpiY = (int)Math.Round(image.VerticalResolution, MidpointRounding.ToEven);
Console.WriteLine("DPI is {0} x {1}", dpiX, dpiY);

Przed zapisaniem debug zawsze pokazuje poprawną rozdzielczość przypisaną przez SetResolution, zapisany obraz jest tam, gdzie jest problem.

Prawdopodobnie to zostało tutaj zgłoszone:http://social.msdn.microsoft.com/Forums/vstudio/en-US/62368caa-05f4-4798-9c59-5d82f881a97c/systemdrawingbitmapsetresolution-is-completely-broken-on-windows-7?forum=netfxbcl

Ale problem wydaje się pozostać nierozwiązany. Czy naprawdę nie ma sposobu, aby to po prostu sprawiło, że to działa? Czy muszę do tego używać dodatkowych bibliotek?

questionAnswers(2)

yourAnswerToTheQuestion