C#图像调整数学问题

时间:2012-01-29 22:21:25

标签: c# c#-4.0

所以我有一些简单的代码可以在我们使用它们时重新调整我的个人资料图像的大小,问题是,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的值...

任何想法,我可能做错了什么?

2 个答案:

答案 0 :(得分:5)

(282 / width)(337 / height)integer division - 当分母大于分子时,结果会得到0

让其中一个分组参与者浮动,以确保浮点除法。

if (width >= height)
{
    reductionPercentage = (282f / width);
}
if (width < height)
{
    reductionPercentage = (337f / height);
}

答案 1 :(得分:2)

由于282337widthheight都是整数,/运算符执行整数除法,截断任何小数部分结果。请改用282f337f

if (width >= height)
{
    reductionPercentage = 282f / width;
}
else
{
    reductionPercentage = 337f / height;
}

f后缀表示该数字为float而不是int,因此执行浮点除法。