所以我有一些简单的代码可以在我们使用它们时重新调整我的个人资料图像的大小,问题是,C#代码没有按照我预期的方式工作......
以下是索引视图的Controller Action Method中的一些代码,我正在这样做......
string fullFileName = HttpContext.Server.MapPath(profile.ProfilePhotoPath);
System.Drawing.Image img = System.Drawing.Image.FromFile(fullFileName);
int width = img.Width;
int height = img.Height;
float reductionPercentage = 0F;
if (width >= height)
{
reductionPercentage = (282 / width);
}
if (width < height)
{
reductionPercentage = (337 / height);
}
int newWidth = (int)Math.Round(width * reductionPercentage);
int newHeight = (int)Math.Round(height * reductionPercentage);
ViewBag.newWidth = newWidth;
ViewBag.newHeight = newHeight;
除非遇到“reductionPercentage = * ”
,否则这部分内容完美无缺。如果图像较小或尺寸相同,则reducePercentage完全按照预期的方式执行,并将值1分配给reductionPercentage,但是,如果图像较大,则表示它根本不进行数学运算,它总是吐出0作为reductionPercentage的值...
任何想法,我可能做错了什么?
答案 0 :(得分:5)
(282 / width)
和(337 / height)
为integer division - 当分母大于分子时,结果会得到0
。
让其中一个分组参与者浮动,以确保浮点除法。
if (width >= height)
{
reductionPercentage = (282f / width);
}
if (width < height)
{
reductionPercentage = (337f / height);
}
答案 1 :(得分:2)
由于282
,337
,width
和height
都是整数,/
运算符执行整数除法,截断任何小数部分结果。请改用282f
和337f
:
if (width >= height)
{
reductionPercentage = 282f / width;
}
else
{
reductionPercentage = 337f / height;
}
f
后缀表示该数字为float
而不是int
,因此执行浮点除法。