1. 程式人生 > >第6天Bitmap二次取樣-尺寸壓縮

第6天Bitmap二次取樣-尺寸壓縮

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