第6天Bitmap二次取樣-尺寸壓縮
阿新 • • 發佈:2018-12-26
第6天Bitmap二次取樣-尺寸壓縮
一.為什麼二次取樣
二.哪二次取樣
三.程式碼:從SD卡中讀取圖片經過尺寸壓縮後顯示在ImageView上面
BitmapFactory2個重要的方法:
1.Bitmap bitmap=BitmapFactory.decodeFile(檔案的路徑,Options物件):SD卡中檔案路徑------->Bitmap物件
2.bitmap物件.compress():Bitmap物件------>輸出流
//引數一 圖片的格式 引數二 圖片質量 0-100 引數三:輸出流
bitmap.compress(Bitmap.CompressFormat.JPEG,100,new FileOutputStream(file1));
(1)新增讀寫SD卡的許可權
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
(2)從SD卡中讀取圖片經過尺寸壓縮後顯示在ImageView上面
第一次:獲得縮放比例 ,是2的冪次
第二次:根據縮放比例進行壓縮
public class Two_sampling_Activity extends AppCompatActivity {
private ImageView imageView1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_two_sampling_);
imageView1=findViewById (R.id.image1);
}
//二次取樣 尺寸壓縮
public void click2(View view) {
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File file=Environment.getExternalStorageDirectory();
File file1=new File(file,"xiaoyueyue.jpg");
Bitmap bitmap=compressBitmap(file1.getAbsolutePath(),imageView1.getMaxWidth(),imageView1.getMaxHeight());
imageView1.setImageBitmap(bitmap);
}
}
/***
* @param path 圖片在SD卡中的路徑
* @param view_width 控制元件的寬
* @param view_height 控制元件的高
* @return
*/
public Bitmap compressBitmap(String path,int view_width,int view_height){
//TODO 第一次取樣:只採原圖的寬和高,計算縮放比例
BitmapFactory.Options options=new BitmapFactory.Options();
//設定只採圖片的邊框,不採畫素點
options.inJustDecodeBounds=true;
BitmapFactory.decodeFile(path,options);
//獲取採到的寬度和高度(原圖)
int width=options.outWidth;
int height=options.outHeight;
//計算縮放比例,比例必須是2的冪方
int size=1;
while(width/size>view_width||height/size>view_height){
size*=2;
}
//TODO 第二系取樣:按照上面的比例進行取樣
//設定要採畫素點
options.inJustDecodeBounds=false;
//設定比例
options.inSampleSize=size;
//設定取樣畫素點的小鎖
options.inPreferredConfig=Bitmap.Config.ARGB_8888;
//取樣吧
return BitmapFactory.decodeFile(path,options);
}
}