C# 如何在保留矩形的同时按纵横比剪切图片?

C# 如何在保留矩形的同时按纵横比剪切图片?,c#,math,C#,Math,我的目标是裁剪图像,同时保持纵横比16:9,而不丢失原始图像的一部分,方法是根据当前的比例将原始图像放在中间 我的裁剪尺寸是breiteNeu表示要裁剪的图像的宽度,是hoeheNeu表示要裁剪的图像的高度xNeu是要裁剪的图像的x坐标,yNeu是要裁剪的图像的y坐标 这是我的密码 if (breiteNeu > hoeheNeu) { if (breiteNeu / hoeheNeu > 1.777) { Console.WriteLine("1")

我的目标是裁剪图像,同时保持纵横比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以保持纵横比,同时包含整个
breiteNeu
hoeheNeu
(分配了
hoeheNeu=hj
之前的原始值)区域?breiteNeu=bj在C#中,整数之间的除法总是得到一个整数。如果breiteNeu和hoeheNeu都是整数,则可能会导致意外结果

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

如果(breiteNeu/(浮动)hoeheNeu>1.777)

如果(breiteNeu/(浮动)hoeheNeu>0.5625)


数学看起来是正确的。

有十进制数时不要使用int。使用十进制或浮点。这甚至可能足以修复它。@Sami更新了它。还是一样的问题。数学正确吗?您仍在这里将其转换为
int
xNeu-=(int)((bj-breiteNeu)/2)。这会将其四舍五入到最接近的整数,这可能会导致问题。@Sami这些是像素坐标,它们必须是
int
。请不要: