我有一个应用程序,最终用户可以在其中设计和调整图像的大小和位置。由于规范要求将图像“拉伸”到包含控件,因此最终用户可能会遇到尴尬的拉伸图像。
为了帮助用户调整图像大小,我正在考虑实现一个智能的缩放功能,该功能将使用户能够轻松地固定图片的纵横比,以使其不再显得绷紧。
解决此问题的快速方法是实际提供两种选择:1)从宽度缩放比例2)从高度缩放比例。用户选择方法,算法通过使用原始宽高比来调整图片的大小。例如:图片在设计器上显示为200x200,但原始图像为1024x768像素。用户选择“宽度智能尺寸”,由于原始宽高比为1.333,因此新尺寸变为200x150
没关系,但是我如何通过询问重新计算应基于哪个维度来使算法更智能而不打扰用户呢?
如果我正确地解释了您的规范,则您希望得到的结果不大于最终用户最初提出的结果;您希望两个维度之一缩小,而另一个保持不变。换句话说,新尺寸应在一个方向上填充设计者空间,同时在另一个方向上缩短尺寸以保留原始长宽比。
original_ratio = original_width / original_height designer_ratio = designer_width / designer_height if original_ratio > designer_ratio designer_height = designer_width / original_ratio else designer_width = designer_height * original_ratio
通常,您将使用整数坐标,但是要产生上述比率的除法运算必须是浮点数。这是对公式的重新排列,使其更加整数友好。确保您的整数具有处理最大宽度*高度的范围。
if original_width * designer_height > designer_width * original_height designer_height = (designer_width * original_height) / original_width else designer_width = (designer_height * original_width) / original_height