【问题标题】:How do I cut a picture in an aspect ratio while retaining a rectangle inside?如何在保留矩形的同时以纵横比剪切图片?
【发布时间】:2017-09-04 19:56:00
【问题描述】:

我的目标是裁剪图像,同时保持 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 被分配)区域?

【问题讨论】:

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

标签: c# math


【解决方案1】:

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

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

如果 (breiteNeu / (float)hoeheNeu > 1.777)

如果 (breiteNeu / (float)hoeheNeu > 0.5625)

数学看起来是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多