我的目标是在保持宽高比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
之前的原始宽高比区域?
答案 0 :(得分:1)
在C#中,整数之间的除法总是产生整数。如果breiteNeu和hoeheNeu都是整数,那可能会导致意外结果。
将其中一个转换为float,以便将它们正确地与if语句中的float进行比较。
if(breiteNeu /(float)hoeheNeu> 1.777)
和
if(breiteNeu /(float)hoeheNeu> 0.5625)
数学看起来是正确的。