如何在保留矩形内部的同时以纵横比剪切图片?

时间:2017-04-09 20:58:52

标签: c# math

我的目标是在保持宽高比16:9的同时裁剪图像,同时根据当前比例将原始图像放在中央,而不会丢失部分原始图像。

我的裁剪尺寸为breiteNeu,用于裁剪图像的宽度,hoeheNeu用于裁剪图像的高度。 xNeu是要裁剪的图像的x坐标,yNeu是要裁剪的图像的y坐标。

这是我的代码

if (breiteNeu > hoeheNeu)
{
    if (breiteNeu / hoeheNeu > 1.777)
    {
        Console.WriteLine("1");
        float hj = 0.5625f * breiteNeu;
        yNeu -= (int)((hj - hoeheNeu) / 2);
        hoeheNeu = (int)hj;
    }
    else
    {
        Console.WriteLine("2");
        float bj = 1.777f * hoeheNeu;
        xNeu -= (int)((bj - breiteNeu) / 2);
        breiteNeu = (int)bj;
    }
}
else
{
    if (breiteNeu / hoeheNeu > 0.5625)
    {
        Console.WriteLine("3");
        float hj = 1.777f * breiteNeu;
        yNeu -= (int)((hj - hoeheNeu) / 2);
        hoeheNeu = (int)hj;
    }
    else
    {
        Console.WriteLine("4");
        float bj = 0.5625f * hoeheNeu;
        xNeu -= (int)((bj - breiteNeu) / 2);
        breiteNeu = (int)bj;
    }
}

1到3(Console.WriteLine("1")Console.WriteLine("3"))似乎有效,但是4总是通过减小宽度来裁剪图像的一部分以保持纵横比。

如何更改尤其是4以保持宽高比包含整个breiteNeuhoeheNeuhoeheNeu = hj分配breiteNeu = bj之前的原始宽高比区域?

1 个答案:

答案 0 :(得分:1)

在C#中,整数之间的除法总是产生整数。如果breiteNeu和hoeheNeu都是整数,那可能会导致意外结果。

将其中一个转换为float,以便将它们正确地与if语句中的float进行比较。

if(breiteNeu /(float)hoeheNeu> 1.777)

if(breiteNeu /(float)hoeheNeu> 0.5625)

数学看起来是正确的。