我正在根据用户的屏幕分辨率调整一些图像的大小;如果纵横比错误,则应剪切图像。我的代码如下所示:
protected void ConvertToBitmap(string filename)
{
var origImg = System.Drawing.Image.FromFile(filename);
var widthDivisor = (double)origImg.Width / (double)System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width;
var heightDivisor = (double)origImg.Height / (double)System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height;
int newWidth, newHeight;
if (widthDivisor < heightDivisor)
{
newWidth = (int)((double)origImg.Width / widthDivisor);
newHeight = (int)((double)origImg.Height / widthDivisor);
}
else
{
newWidth = (int)((double)origImg.Width / heightDivisor);
newHeight = (int)((double)origImg.Height / heightDivisor);
}
var newImg = origImg.GetThumbnailImage(newWidth, newHeight, null, IntPtr.Zero);
newImg.Save(this.GetBitmapPath(filename), System.Drawing.Imaging.ImageFormat.Bmp);
}
在大多数情况下,这可以正常工作。但是对于某些图像,结果的质量极差。看起来会被调整为非常小的东西(缩略图大小)并再次放大。但图像的分辨率是正确的。我能做些什么?
原始图像示例: 替代文字 http://img523.imageshack.us/img523/1430/naturaerowoods.jpg
注意:我有一个 WPF 应用程序,但我使用 WinForms 函数来调整大小,因为它更容易,而且我已经需要对 System.Windows.Forms 的引用来获取托盘图标。