笔记如下
如图:
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();
}
}
网友评论