我正在开发一个程序来检查目录中的所有PNG图像以获得正确的分辨率并重置不正确的分辨率。对于每个不正确的文件,我使用下面的代码重置其分辨率。
float ppi = 96.0F;
string absolutePath = "...";
[...]
FileStream fs = new FileStream(absolutePath, FileMode.Open);
Image image = Image.FromStream(fs);
fs.Close();
if (image != null)
{
Bitmap bitmap = new Bitmap(image);
bitmap.SetResolution(ppi, ppi);
bitmap.Save(absolutePath, System.Drawing.Imaging.ImageFormat.Png);
}
当我在保存后从位图变量(bitmap.HorizontalResolution,bitmap.VerticalResolution)读取分辨率信息时,它们打印出来是正确的(96)。
但是当我重新启动程序时,相同的文件显示为错误。现在所有分辨率都设置为95,9866。之前有许多不同的价值观。
我已经尝试将SetResolution的ppi转换为整数,但没有成功。
我是否犯了任何错误,或者这是文件格式的问题?有更好的方法吗?
答案 0 :(得分:0)
正如Hans Passant指出的那样,由于文件格式中的英制和单位单位之间的转换,无法准确设置分辨率。所以我找到了一种完全删除它的方法:
Ken Silverman的工具PNGOUT.exe用于优化PNG图像,从而删除所有显式DPI信息。移除后,WPF会将图像的分辨率视为默认的96 DPI分辨率。如果图像与其原始测量一起使用,则不需要缩放 - 这也可能改善UI的性能。但性能影响还有待测试。