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

    }
}

猜你喜欢

转载自blog.csdn.net/qq_34178710/article/details/85063500