我正在編寫一個.NET 4應用程序,它導入並保存要打印的圖像。將保存的圖像分辨率(DPI不是像素尺寸)設置爲我們指定的值以便它們正確打印很重要。.NET - Bitmap.Save忽略Windows上的Bitmap.SetResolution 7
我們導入的某些圖像沒有分辨率值(生成時出現錯誤的EXIF),所以我們必須在寫入之前對其進行更正。我們使用Bitmap.SetResolution。它在XP和Windows 8上運行良好,但是當我們在Windows 7上編寫(Bitmap.Save)圖像時,它們總是使用原始分辨率元信息編寫,而忽略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分配正確的分辨率,所保存的圖像是問題的所在。
但是這個問題似乎仍然沒有得到解決。真的沒有辦法讓它工作嗎?我必須爲此使用額外的庫嗎?
我正在使用牙科X射線,因此圖像具有非常高的分辨率,通常超過1000 DPI。而且,相信我,我遇到的一些系統會讓x分辨率和y分辨率信息變爲空白(我已經用IrfanView檢查了圖像)。謝謝你的回答,我會研究它。同時,我發現我在這裏發佈的一個黑客可以完成這項工作。 –
哦,我知道當你讓人們選擇他們的圖像的分辨率時,它會有多混亂。我們必須校準每個成像設備的值。 –
@HansPassant這是否也適用於PNG圖像? – jimmyjambles