[分享]牛牛圖片查看器[仿QQ圖片查看器]及大致原理說明

這是一個完全通過Duilib來實現的一個圖片查看器,仿照QQ圖片查看器的效果實現,希望大家喜歡。

先看一下使用的截圖吧:

 

做相關說明如下:


一:使用說明
1. 通過命令行調用,傳遞圖片路徑即可打開圖片查看器,支持絕對路徑與相對路徑,如:ImageViewer.exe c:\test.png
2. 在窗口上雙擊可關閉程序

二:功能說明
1. 支持jpg、png、bmp、gif等4種格式圖片
2. 支持圖片拖動偏移後的平滑放大縮小;通過鼠標放大或窗口大小變化時,支持圖片平滑適配
3. 支持非gif圖片的翻轉
4. 支持保存圖片到本地
5. 支持按圖片自動控制窗口的大小顯示[打開進程時]
6. 支持通過上一張與下一張控制顯示圖片所在目錄下的其他圖片[按修改先後時間排序],並顯示當前正在瀏覽哪一張

三:原理說明
額,好像也沒啥好說的,大致就是利用duilib的現有特性功能來實現,比如在放大時,計算出圖片的放大後的尺寸以及窗口的大小,進一步計算出存放圖片的容器的POS信息,設置就好。


我認爲這裏需要注意的是圖片在放大以後,通過鼠標拖動了圖片,再放大時,要能保持在現有的中心處放大,而不是以原始圖片的中心來放大或縮小;這樣可以保證被拖放後的圖片在二次放大或縮小時,整個是一個平滑的過程,也沒啥技術含量,就是一些座標的計算了。


這種工具技術性不強,就是一些細節調試需要花費比較多的時間,以上全部應用duilib的功能實現,沒有自己寫一行繪圖的代碼,有幾點提一下:
1. 通過SetMouseEnabled來控制放大比例顯示的層不響應鼠標事件,這樣可以穿透在圖片上的層,不至於會影響到放大後圖片的位置拖放
2. 通過調整float控件的pos實現,支持負值的pos信息,通過設置pos信息來實現圖片的拖動 
3. 圖片會被緩存,需要在翻轉及切換圖片時,先清理一下相應圖片的緩存[paintmanager.RemoveImage(path)],防止切換後圖片不更新或更新錯
4. 至於其他窗口半透明啥的,咱們就不在這裏討論了,網上信息很多了   ^_^
5. 其他... 

有任何問題,歡迎大家跟帖討論,也可以加我QQ反饋:182534287
歡迎訪問乖乖牛在線:
http://www.ggniu.cn

示例程序下載:http://download.csdn.net/detail/tragicguy/8965903

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章