国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android開發之圖片壓縮實現方法分析

2019-12-12 00:16:14
字體:
來源:轉載
供稿:網友

本文實例講述了Android開發之圖片壓縮實現方法。分享給大家供大家參考,具體如下:

由于Android本身的機制限定 由于系統對每個應用內存分配規則的限制,如果加載過大圖片很有可能會導致OOM

即閃退或者卡屏現象

但是手機上拇指大小的圖片,超清是完全沒有必要的

這是我們就需要對

對片進行壓縮處理:

大多數人采用先生成bitmap對象,反復壓縮bitmap至100k一下的方法,對圖片進行反復壓縮,但如果是超級大圖,bitmap生成本身就已經會導致OOM,所以我們應先對bitmap進行設置:

public static Bitmap ChangeXY(Scenic scenic, Activity activity){    BitmapFactory.Options options = new BitmapFactory.Options();    options.inSampleSize = 6;    options.inPreferredConfig = Bitmap.Config.RGB_565;    options.inPurgeable = true;    options.inInputShareable = true;    Bitmap bitmap = BitmapFactory.decodeResource(activity.getResources(),scenic.getImageId(),options);    if (bitmap.getRowBytes() * bitmap.getHeight() > 1024 ){      bitmap = compressImage(bitmap);    }    return bitmap;}

options.inSampleSize = 6;設置 是的原圖大小被縮小2*6=12倍

這里我解釋一下Scenic和activity:

一、senic是我自定義的一個類,其中定義了一個數據成員:imageId 用來存/drawable文件夾下,一張圖片的id。(注:不同senic對象,代表不同圖片,所以存的圖片id不同)。

二、關于activity:由于圖像處理的方法與主活動無關,所以我這里將其封裝在一個特定靜態類中,但是由于執行過程中需要使用著獲得(Activity類對象)的方法,所以將主活動作為一個參數(activity)傳入。再MainActivity中activity這樣賦值:activity=MainActivity.this

之后再采用反復壓縮bitmap來保證大小:

private static Bitmap compressImage(Bitmap image) {    ByteArrayOutputStream baos = new ByteArrayOutputStream();    image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//質量壓縮方法,這里100表示不壓縮,把壓縮后的數據存放到baos中    int options = 100;    while ( baos.toByteArray().length / 1024>100) { //循環判斷如果壓縮后圖片是否大于100kb,大于繼續壓縮      baos.reset();//重置baos即清空baos      image.compress(Bitmap.CompressFormat.JPEG, options, baos);//這里壓縮options%,把壓縮后的數據存放到baos中      options -= 50;//每次都減少10    }    ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把壓縮后的數據baos存放到ByteArrayInputStream中    Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream數據生成圖片    return bitmap;}

如下圖中的圖片,原大小為8.10MB:

更多關于Android相關內容感興趣的讀者可查看本站專題:《Android圖形與圖像處理技巧總結》、《Android開發入門與進階教程》、《Android調試技巧與常見問題解決方法匯總》、《Android基本組件用法總結》、《Android視圖View技巧總結》、《Android布局layout技巧總結》及《Android控件用法總結

希望本文所述對大家Android程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 慈溪市| 武夷山市| 防城港市| 利津县| 云霄县| 林州市| 沧州市| 东阿县| 宁蒗| 阿克苏市| 美姑县| 吉木萨尔县| 容城县| 民和| 赤峰市| 古田县| 甘泉县| 玉屏| 长子县| 邹平县| 电白县| 犍为县| 普宁市| 炎陵县| 尤溪县| 晋州市| 独山县| 天峨县| 肃宁县| 新泰市| 西乌| 石首市| 孟连| 梅河口市| 临沂市| 驻马店市| 岑溪市| 平和县| 隆尧县| 商城县| 葵青区|