C # Image Resize Math Issue - PullRequest
       0

C # Image Resize Math Issue

0 голосов
/ 30 января 2012

Итак, у меня есть простой фрагмент кода, который изменяет размеры изображений моего профиля по мере их использования, проблема в том, что код C # работает не так, как я ожидал ...

Вот немногокод внутри метода действия контроллера для представления индекса, где я делаю это ...

    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 = * "

Если изображение меньше или имеет тот же размер, extensionPercentage работает точно так же, как и должно, и присваивает значение 1 ReductionPercentage, однако, если изображение больше, оно как быматематика вообще, она всегда выплевывает 0 как значение для ReductionPercentage ...

Любые идеи, что я мог сделать неправильно?

Ответы [ 2 ]

5 голосов
/ 30 января 2012

(282 / width) и (337 / height) равны целочисленное деление - когда знаменатель больше числителя, в результате вы получите 0.

Сделайте одного из участников деления плавающим, чтобы обеспечить деление с плавающей запятой.

if (width >= height)
{
    reductionPercentage = (282f / width);
}
if (width < height)
{
    reductionPercentage = (337f / height);
}
2 голосов
/ 30 января 2012

Поскольку 282, 337, width и height являются целыми числами, оператор / выполняет целочисленное деление, обрезая любую дробную часть результата.Вместо этого используйте 282f и 337f:

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

Суффикс f сигнализирует, что число является float вместо int, так что выполняется деление с плавающей запятой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...