用于将图像调整为最大高度和最大宽度范围的数学

Tom*_*len 2 scaling resize image-processing

鉴于图像:

maxWidth = 400;
maxHeight = 200;
width = photo.Width;
height = photo.Height;
Run Code Online (Sandbox Code Playgroud)

如果任一维度超过最大属性,我将如何缩放图像?

以下是一些测试用例:

300x300  :   Too tall, but width ok.
500x200  :   Too wide, but height ok.
650x300  :   Too tall and too wide
300x190  :   Fine, don't resize
Run Code Online (Sandbox Code Playgroud)

我无法想象数学,对不起,如果它太简单了!给我带来最多麻烦的案例是两个尺寸都超过允许的最大值.

Mar*_*tos 11

单独计算所需的垂直和水平缩放,然后选择两者中较小的一个并将结果钳位到最大值1.在代码中:

scale = min(1, min(maxWidth/photo.Width, maxHeight/photo.Height))
Run Code Online (Sandbox Code Playgroud)

确保除法运算使用浮点运算.如何做到这一点因语言而异.在C/Java/C#及其同类中,将其中一个操作数转换为float.