Я пишу приложение .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, проблема заключается в сохраненном изображении.
Вероятно, это то, о чем сообщалось здесь: -on-windows-7?forum=netfxbcl" rel="noreferrer">http://social.msdn.microsoft.com/Forums/vstudio/en-US/62368caa-05f4-4798-9c59-5d82f881a97c/systemdrawingbitmapsetresolution-is -полностью сломанный-на-windows-7?forum=netfxbcl
Но проблема там, кажется, остается нерешенной. Неужели нет способа просто заставить его работать? Нужно ли для этого использовать дополнительные библиотеки?