图片的二次采样
2017-12-04 20:53
260 查看
@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;
}
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;
}
相关文章推荐
- Android 图片二次采样、质量压缩
- Android 图片二次采样、质量压缩
- Android 图片二次采样
- 图片二次采样
- Android大图片的二次采样
- 图片的二次采样
- Android_Bitmap_图片的二次采样并生成缩略图
- 安卓代码实现图片二次采样
- 图片二次采样
- 图片的二次采样
- 图片的二次采样
- Android_Bitmap_图片的二次采样并生成缩略图
- 网络地址图片二次采样(HttpURLConnection)
- 图片的二次采样
- 图片二次采样和按质量压缩
- 图片二次采样
- 图片的二次采样
- Android 图片二次采样、质量压缩
- 图片(Bitmap)二次采样、图片内存计算
- Bitmap二次采样处理图片