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;
}
}