.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?