图片缓存

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