相信作Android開發的小夥伴對於Android圖片壓縮、裁剪必定有很深的印象,今天我將帶領你們一塊兒學習一下這個看着高深莫測的知識,以便再之後的學習、工做中能夠幫助到你們。緩存
首先咱們看一下這個問題出現的緣由,當咱們須要在咱們的應用中添加大量圖片是,程序每每會報出OMM問題,這是什麼問題呢?是當咱們添加的照片過多或過大時,Android就會報出超內存錯誤,每每咱們遇到這個問題都很無奈,進行圖片緩存優化能夠幫助咱們解決這個問題,可是不少時候咱們根本不知道,如何進行內存優化,很明顯我就是這樣的一位,這裏我採用了壓縮圖片、裁剪圖片的方式,減小圖片佔用的內存,從而使圖片展現流暢。函數
下面咱們先看一下如何進行圖片的裁剪:裁剪圖片有兩種方式,一種調用系統的裁剪方式,這種方式能夠方便用戶選擇本身的裁剪區域,不少關於圖片裁剪的視頻,講的就是這一種;第二種是經過後臺函數直接進行裁剪,這種方式的好處在於,簡化了用戶的操做,方便快捷。對於第一種,你們能夠百度一下,本篇咱們一塊兒來探討一下如何經過後臺函數實現對圖片的自動裁剪。學習
File file = new File(fileString);//文件對象;fileString:文件的地址 InputStream is = null; try { is = new FileInputStream(file);//得到一個文件輸入流對象 } catch (FileNotFoundException e) { e.printStackTrace(); } BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = false;//這個參數必定要設置爲false;若是將其設爲true的話,在decode時將會返回null,經過此設置能夠去查詢一個bitmap的屬性,好比bitmap的長與寬,而不佔用內存大小 double n = file.length()/1024.0;//得到文件的大小 if(n<200){ options.inSampleSize = 2;//width,hight設爲原來的二分一 }else{ options.inSampleSize = 3;//width,hight設爲原來的三分一 } Bitmap bitmap = BitmapFactory.decodeStream(is, null, options);
BitmapFactory.decodeStream(is, null, options);根據上面咱們設置壓縮比,對圖片進行壓縮處理。優化
下面咱們一塊兒來談談如何進行圖片的裁剪,這裏我介紹的是自定義裁剪,經過咱們設置裁剪起點和裁剪長寬值實現對圖片的裁剪。這裏我將以實現一個根據圖片的長寬,取最短邊爲邊居中裁剪。spa
int w = options.outWidth;//獲得圖片的寬 int h = options.outHeight;//獲得圖片的高 int wh = w > h ? h : w;// 裁切後所取的正方形區域邊長 int retX = w > h ? (w - h) / 2 : 0;//基於原圖,取正方形左上角x座標 int retY = w > h ? 0 : (h - w) / 2;//基於原圖,取正方形左上角y座標 Bitmap.createBitmap(bitmap, retX, retY, wh, wh, null, false);
好了關於圖片的壓縮與裁剪就爲你們介紹完了,但願對你們有一些幫助吧。ImageView實現適屏和裁剪圖片的功能視頻下載:http://pan.baidu.com/s/1mhkM1s8code