.NET - Bitmap.Save игнорирует Bitmap.SetResolution в Windows 7

Я пишу приложение .NET 4, которое импортирует и сохраняет изображения для печати. Это'Важно, чтобы разрешение сохраненных изображений (DPI, а не размеры в пикселях) было установлено на указанное нами значение, чтобы они печатались правильно.

Некоторые изображения, которые мы импортируем, поставляются без значения разрешения (плохой EXIF, когда они были сгенерированы), поэтому мы должны исправить это перед их записью. Для этого мы используем Bitmap.SetResolution. Он отлично работает в XP и Windows 8, но когда мы пишем (Bitmap.Save) изображения в Windows 7, они всегда пишутся с метаинформацией исходного разрешения, игнорируя SetResolution.

Вот'Тест, который мы сделали, работает на XP и 8, а не на 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);

Перед сохранением отладка всегда показывает правильное разрешение, назначенное SetResolution, сохраненное изображение - это то, где проблема.

Это, вероятно, то, что сообщалось здесь:http://social.msdn.microsoft.com/Forums/vstudio/en-US/62368caa-05f4-4798-9c59-5d82f881a97c/systemdrawingbitmapsetresolution-is-completely-broken-on-windows-7?forum=netfxbcl

Но проблема там, кажется, остается нерешенной. Неужели нет способа просто заставить это работать? Нужно ли использовать для этого дополнительные библиотеки?

Ответы на вопрос(2)

Ваш ответ на вопрос