Android Gallery圖片雙擊放大倍數的演算法

來源:互聯網
上載者:User

標籤:android   gallery   

圖片雙擊放大倍數和圖片大小、顯示圖片的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值即是圖片應該放大的倍數。


轉載請註明出處:周木水的CSDN部落格 http://blog.csdn.net/zhoumushui

我的GitHub:周木水的GitHub https://github.com/zhoumushui


Android Gallery圖片雙擊放大倍數的演算法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.