给出一张图片:
maxWidth = 400;
maxHeight = 200;
width = photo.Width;
height = photo.Height;
如果任一尺寸超过最大属性,我将如何缩放图像?
以下是一些测试用例:
300x300 : Too tall, but width ok.
500x200 : Too wide, but height ok.
650x300 : Too tall and too wide
300x190 : Fine, don't resize
我无法想象数学,对不起,如果它太简单了!给我带来最多麻烦的案例是两个尺寸超过允许的最大尺寸。
答案 0 :(得分:11)
分别计算所需的垂直和水平缩放,然后选择两者中较小的一个并将结果钳位到最大值1.代码:
scale = min(1, min(maxWidth/photo.Width, maxHeight/photo.Height))
确保除法运算使用浮点运算。如何做到这一点因语言而异。在C / Java / C#及其同类中,将其中一个操作数转换为float。
答案 1 :(得分:2)
计算两个比率(浮点结果):
然后,
答案 2 :(得分:0)
我的数学很糟糕,但是,假设你想要一个比例尺,我会这样解决:
if maxWidth < photo.Width
width = 'too big'
if maxHeight < photo.Height
height = 'too big'
if height == 'to big' & width == 'too big'
x = photo.Width / maxWidth;
y = photo.Height / maxHeight;
if x > y
scale_by_width(photo)
else
scale_by_height(photo)
elseif height == 'too big'
scale_by_height(photo)
elseif width == 'too big'
scale_by_width(photo)
else
do_nothing