圖片緩存

package zhanghaijiao.bawei.com.pic_erci_demo;

import android.Manifest;

import android.content.pm.PackageManager;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.Environment;

import android.support.annotation.NonNull;

import android.support.v4.app.ActivityCompat;

import android.support.v4.content.ContextCompat;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.ImageView;

import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

private String sdPicSdPath;

private ImageView img;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

img = (ImageView) findViewById(R.id.img);

//sd..bb.jpg 1024*768 2M

//320*320分辨率

//得到sd卡上圖片的路徑

sdPicSdPath = Environment.getExternalStorageDirectory().getPath()+"/img/bb.jpg";

//運行時權限的判斷

int i = ContextCompat.checkSelfPermission(this, 

Manifest.permission.READ_EXTERNAL_STORAGE);

if(i!= PackageManager.PERMISSION_GRANTED){//此權限沒有被授權

//申請權限-彈出對話框

ActivityCompat.requestPermissions(MainActivity.this,new String[]

{Manifest.permission.READ_EXTERNAL_STORAGE},100);

}else {//已經授權

Bitmap bitmap= compassPic(sdPicSdPath,320,320);

img.setImageBitmap(bitmap);

}

}

//處理用戶的授權結果

@Override

public void onRequestPermissionsResult(int requestCode, @NonNull String[] 

permissions, @NonNull int[] grantResults) {

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

//ctrl+alt+f  提取成全局變量

if(requestCode==100){

if(grantResults!=null && 

grantResults[0]==PackageManager.PERMISSION_GRANTED){

Bitmap bitmap= compassPic(sdPicSdPath,320,320);

img.setImageBitmap(bitmap);



}else {

Toast.makeText(MainActivity.this,"被拒絕!",Toast.LENGTH_SHORT).show();

}

}

}

//二次採樣-加載sd卡的圖片

/**

*

* @param picPath sd

上圖片的路徑

* @param widthPx 期望圖片壓縮的寬度 px

* @param heightPx 期望圖片壓縮後的高度 px

* @return

*/

public Bitmap compassPic(String picPath,int widthPx,int heightPx){

//第一次採樣:主要是要拿到原圖片的寬度與高度

//第二次採樣:計算採樣率,進行壓縮

///////////////////////////start 01/////////////////////////////////////

BitmapFactory.Options options=new BitmapFactory.Options();

options.inJustDecodeBounds=true;//設置成true,只拿圖片的邊框

BitmapFactory.decodeFile(picPath,options);//根據圖片,轉換成Bitmap對象

//得到圖片的寬度與高度

int outWidth = options.outWidth;

int outHeight = options.outHeight;

///////////////////////////end 01/////////////////////////////////////

//壓縮率

int sampleRate=1;

if(outWidth>widthPx || outHeight>heightPx){

int widthSample = outWidth / widthPx;

int heightSample=outHeight/heightPx;

//計算採樣率

sampleRate=widthSample>heightPx?widthSample:heightSample;

}

options.inJustDecodeBounds=false;//第二次設置成false

options.inPreferredConfig= Bitmap.Config.RGB_565;//設置圖片的色彩模式  1px=2字節  ARGB_8888  1px=4字節

//最後得到的結果

Bitmap bitmap=BitmapFactory.decodeFile(picPath,options);

return bitmap;

}

}

發佈了39 篇原創文章 · 獲贊 5 · 訪問量 8533
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章