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