重新缩放图像只需知道保留纵横比的比例因子即可

Rescaling an image just knowing a scale factor preserving aspect Ratio

本文关键字:保留 缩放 新缩放 图像      更新时间:2023-10-16

好吧,我知道这听起来像是另一个问题的转发,但我找不到任何人问和我一样的问题,或者我错了,因为这不是处理问题的方式,但无论如何它来了:

我有一个输入图像,比如HD 1920 * 1080,我只知道一个比例因子:比如0.3(原始尺寸的30%)。如何在保持纵横比的同时计算接近原始目标大小 30% 的新目标大小?换句话说,如何将图像准确地重新缩放到30%?

如果这毫无意义,请您告诉我如何在不知道目标大小而只知道比例因子的情况下缩放图像?

谢谢

Ps:我使用的是C/C++,但是伪代码还可以

如果你的高度和宽度是整数,你可以这样做......

height = height * (int)(scaleFactor*100) / 100;
width  = width  * (int)(scaleFactor*100) / 100;

或者,此解决方案也适用于int但对于浮点变量更有意义......

height = floor(height * scaleFactor);
width  = floor(width  * scaleFactor);

或者,无论变量类型如何,您都可以让编译器担心如何处理舍入......

height = height * scaleFactor;
width  = width  * scaleFactor;

。但是使用该解决方案,您可能会从一个平台到下一个平台出现 1 个舍入误差。 不过,这在您的用例中可能并不重要。

另一种可能性是,如果你的scaleFactor本身是一个int并且(在这个例子中)是 30%,那么scaleFactor可能是值30,你只需这样做......

height = height * scaleFactor / 100;
width  = width  * scaleFactor / 100;

关键是,如果将x和y坐标按相同的因子缩放,则可以保留原始纵横比。