有人可以解决这个问题吗?
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.这在代码中不起作用 - 任何想法?
我显然在这里做了一些愚蠢的错误,任何人都可以对此有所了解吗?
讽刺一个愚蠢的问题。谢谢你的帮助!
克里斯。
答案 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这样的简单事情,它不是必需的,也不会添加任何值。