如何将一个矩形缩放到另一个矩形内的最大尺寸?
我有一个源矩形和一个目标矩形。 我需要find在拟合目标矩形的同时可以缩放信号源的最大比例,并保持其原始高宽比 。
谷歌find了一个办法,但我不知道它是否适用于所有情况。 这是我家酿的解决scheme:
- 计算每个矩形的高度/宽度。 这给出了对angular线
msrc
和mdest
。 - 如果
msrc < mdst
,则缩放源宽度以适合目标宽度 (以及相同比例的缩放高度) - 否则,缩放源高度以适合目标高度 (以相同的比例缩放宽度)
寻找其他可能的解决scheme来解决这个问题 我甚至不确定我的algorithm是否适用于所有情况!
scale = min( dst.width/src.width, dst.height/src.height)
这是你的方法,但写得更干净。
另一个选项可能是缩放到最大宽度,然后检查缩放高度是否大于最大允许高度,如果是按高度缩放(反之亦然):
scale = (dst.width / src.width); if (src.height * scale > dst.height) scale = dst.height / src.height;
我认为这个解决scheme更短,更快,更易于理解。
- 计算出
destWidth / srcWidth
和destHeight / srcHeight
较小的destHeight / srcHeight
- 按比例缩放
编辑它当然是相同的你的方法,公式的部分移动。 我的意见是,这在语义上更清楚,但只是 – 一个意见。
如果所有维度都是非零的,我会使用下面的代码(基本上匹配你的代码)。
scaleFactor = (outerWidth / outerHeight > innerWidth / innerHeight) ? outerHeight / innerHeight : outerWidth / innerWidth
这也可以修改,以允许任何维度如果需要为零。