2018-03-18 图片处理(一)----图片加载

笔记如下



如图:
2018-03-18_081925.png


实现步骤: 从sd卡中显示图片

1.因为是android6.0系统,所以要动态申请读写sd卡的权限
2.显示图片

  • 为了与屏幕大小更加的契合,要动态的获取对图片的一个采样率

采样率: 比如采样率为4,对于一个1000*1000的图片,宽和高:1000 * 1000 ----> 高:1/4 * 宽:1/4 = 总:1/16 ---- 以1/16的大小来采样

  • 动态获取采样率
            //应该通过手机屏幕来确定采样率的多少
            //屏幕宽高
            DisplayMetrics metrics = getResources().getDisplayMetrics();
            int scteenWidth = metrics.widthPixels;//屏幕宽度
            int scteenHeight = metrics.heightPixels;//屏幕高度
             //图片宽高
            //exif:包含图片信息的头文件
            ExifInterface exif = new ExifInterface(path);
            int picWidth = exif.getAttributeInt(ExifInterface.TAG_IMAGE_WIDTH, 0);//图片的宽度
            int picHeight = exif.getAttributeInt(ExifInterface.TAG_IMAGE_LENGTH, 0);//图片的高度

计算出采样率:

            //图片宽度/屏幕的宽度
            //考虑数值的四舍五入
            int widthSample = (int) (picWidth * 1f / scteenWidth + 0.5f);
            int heightSample = (int) (picHeight * 1f / scteenHeight + 0.5f);
            //拿到采样率
            int sample = (int) (Math.sqrt(widthSample * widthSample + heightSample * heightSample)



完整源码:

    public void loadBitmap(View v){

        String path = "storage/emulated/0/6.jpg";

        //通过手机屏幕的宽高来计算采样率


        //应该通过手机屏幕来确定采样率的多少
        //屏幕宽高
        DisplayMetrics metrics = getResources().getDisplayMetrics();
        int scteenWidth = metrics.widthPixels;//屏幕宽度
        int scteenHeight = metrics.heightPixels;//屏幕高度

        try {
            //图片宽高
            //exif:包含图片信息的头文件
            ExifInterface exif = new ExifInterface(path);
            int picWidth = exif.getAttributeInt(ExifInterface.TAG_IMAGE_WIDTH, 0);//图片的宽度
            int picHeight = exif.getAttributeInt(ExifInterface.TAG_IMAGE_LENGTH, 0);//图片的高度


            //图片宽度/屏幕的宽度
            //考虑数值的四舍五入
            int widthSample = (int) (picWidth * 1f / scteenWidth + 0.5f);
            int heightSample = (int) (picHeight * 1f / scteenHeight + 0.5f);
            //拿到采样率
            int sample = (int) (Math.sqrt(widthSample * widthSample + heightSample * heightSample) + 0.5f);

            //加载图片
            BitmapFactory.Options opts = new BitmapFactory.Options();

            //宽和高:1000 * 1000 ----> 4  高:1/4 * 宽:1/4 = 总:1/16 ---- 以1/16的大小来采样
            opts.inSampleSize = sample ;//采样率

            Bitmap bitmap = BitmapFactory.decodeFile(path,opts);

            iv.setImageBitmap(bitmap);

            
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

你可能感兴趣的:(2018-03-18 图片处理(一)----图片加载)