图片双击放大倍数和图片大小、显示图片的view大小。及图片当前的scale大小均有关系。

为了避免图片放大过大。设置了一个放大倍数的最大限制SCALE_LIMIT,眼下该值为4.

 

详细算法例如以下所看到的:

图片的宽和高分别记为:imageW imageH

显示图片的view宽和高分别记为:viewW viewH

几个重要的比例记为:

scale_1 = viewW / imageW

scale_2 = viewH / imageH

scale_3 = viewW / imageH

scale_4 = viewH / imageW

 

假设当前图片的宽高比>2或者<0.5,则依照例如以下算法计算放大倍数zoomRate:

(1)当前scale = min(scale_1, scale_2)。

(2)zoomRate = min(max(scale_1, scale_2), max(scale_3, scale_4));

(3)假设zoomRate > SCALE_LIMIT,则zoomRate = SCALE_LIMIT;

(4)假设scale >= zoomRate,则保留(1)的结果从第(2)步又一次计算zoomRate值,否则跳至(6)

     zoomRate = max(max(scale_1, scale_2), max(scale_3, scale_4));

(5)假设zoomRate > SCALE_LIMIT,则zoomRate = SCALE_LIMIT;

(6)此时zoomRate值即是图片应该放大的倍数。

 

假设当前图片的宽高比<=2或者>=0.5,则依照例如以下算法计算放大倍数zoomRate:

(1)当前scale = min(scale_1, scale_2)。

(2)largerInitRate = max(min(scale_1, scale_2), min(scale_3, scale_4));

(3)假设largerInitRate > SCALE_LIMIT,则largerInitRate = SCALE_LIMIT;

(4)zoomRate = min(scale_2, largerInitRate * 2.0f);

(5)假设zoomRate > SCALE_LIMIT。则zoomRate = SCALE_LIMIT;

(6)假设scale >= zoomRate,则保留前3步的结果,从第(4)步又一次计算zoomRate值,否则跳至(8)

     zoomRate = largerInitRate * 2.0f;

(7)假设zoomRate > SCALE_LIMIT,则zoomRate = SCALE_LIMIT;

(8)此时zoomRate值即是图片应该放大的倍数。