.Net - Bitmap.Save ignora Bitmap.SetResolution no Windows 7

Estou escrevendo um aplicativo .NET 4 que importa e salva imagens para impressão. É importante que a resolução das imagens salvas (DPI, não as dimensões em pixels) seja definida com o valor que especificamos para que sejam impressas corretamente.

Algumas das imagens que importamos vêm sem o valor de resolução (EXIF ruim quando elas foram geradas), então temos que corrigir isso antes de escrevê-las. Nós usamos Bitmap.SetResolution para isso. Ele funciona bem no XP e no Windows 8, mas quando escrevemos (Bitmap.Save) as imagens no Windows 7, elas são sempre escritas com a meta-informação de resolução original, ignorando o SetResolution.

Aqui está um teste que fizemos, funciona no XP e 8, não no 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);

Antes de salvar, a depuração sempre mostra a resolução correta atribuída pelo SetResolution, a imagem salva é onde está o problema.

Isso é provavelmente o que foi relatado aqui:http://social.msdn.microsoft.com/Forums/vstudio/pt-BR/62368caa-05f4-4798-9c59-5d82f881a97c/systemdrawingbitmapsetresolution-is-completely-broken-on-windows-7?forum=netfxbcl

Mas a questão parece permanecer sem solução. Existe realmente nenhuma maneira de apenas fazer o trabalho? Eu tenho que usar bibliotecas extras para isso?

questionAnswers(2)

yourAnswerToTheQuestion