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

Chr*_*s M 2 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);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

克里斯.

Ed *_* S. 10

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

小心你的var. image.Width是一个整数,所以你在这里执行整数除法:

(150 / current);
Run Code Online (Sandbox Code Playgroud)

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

double scaleHeight = (150.0 / current);
Run Code Online (Sandbox Code Playgroud)

当然,它应该是这样的:

double newWidth = 150;
var current = image.Width;
double scaleHeight = (newWidth / current);
Run Code Online (Sandbox Code Playgroud)

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