图像调整大小计算 - 发生了什么?

时间:2011-01-31 21:29:42

标签: c# asp.net

有人可以解决这个问题吗?

ASP.NET 4.0 / C#

代码:

Image image = Image.FromStream(Request.Files[0].InputStream);
var newWidth = 150;
var current = image.Width;
double scaleHeight = (150 / current);
if (scaleHeight == 0)
{
    scaleHeight = 0.2;
}
var newHeight = Convert.ToInt32(image.Height * scaleHeight);
var thumbnailBitmap = new Bitmap(newWidth, newHeight);
Graphics thumbnailGraph = Graphics.FromImage(thumbnailBitmap);

上面的代码总是将scaleHeight设置为0.2。奇怪的是,调试器中的image.Width正在引用图像的正确宽度,所以逻辑上150 / x应该给出十进制百分比150是x,然后我可以根据该百分比(高度*结果)锻炼一个新的高度 - 至少我认为这是数学!呵呵。

例如:150/1024 == 0.1464。那么768 * 0.1464 == 112(int) - 768的14%大约是112.这在代码中不起作用 - 任何想法?

我显然在这里做了一些愚蠢的错误,任何人都可以对此有所了解吗?

讽刺一个愚蠢的问题。谢谢你的帮助!

克里斯。

1 个答案:

答案 0 :(得分:10)

  

上面的代码总是将scaleHeight设置为0.2

小心你的var。 image.Width是一个整数,因此您在此处执行整数除法:

(150 / current);

如果current大于150,结果将始终为0.将结果赋值为double的行为并不意味着未使用整数除法获得结果。试试这个:

double scaleHeight = (150.0 / current);

当然,它应该是这样的:

double newWidth = 150;
var current = image.Width;
double scaleHeight = (newWidth / current);

作为旁注,'var'关键字非常适合减少代码中不必要的冗长。但是,我不会养成将所有声明为'var'的习惯。首先,它只会使您的特定代码段不太清晰。其次,你并没有真正保存任何打字(好吧,还有几个字母输入'double',但是你需要它!)。我的建议是只在使代码更容易阅读/理解时才使用'var',因为它没有那么多不必要的冗长。对于像声明int这样的简单事情,它不是必需的,也不会添加任何值。