/** * 从SD卡读Bitmap * @author YOLANDA * @param filePath * @param reqWidth * @param reqHeight * @return */public static Bitmap getBitmapFromSdCard(String filePath, int reqWidth, int reqHeight) {final BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds = true;BitmapFactory.decodeFile(filePath, options);options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);options.inJustDecodeBounds = false;return BitmapFactory.decodeFile(filePath, options);}/** * 计算样本大小 * @author YOLANDA * @param options * @param reqWidth * @param reqHeight * @return */private static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {final int height = options.outHeight;final int width = options.outWidth;int inSampleSize = 1;if (height > reqHeight || width > reqWidth) {final int heightRatio = Math.round((float) height / (float) reqHeight);final int widthRatio = Math.round((float) width / (float) reqWidth);inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;}return inSampleSize;}/** * 从资源中按照ID读取图片(防止OOM) * @author YOLANDA * @param res * @param id * @param height * @return */public static Bitmap getBitmapFromRes(Resources res, int resId, int height) {Bitmap b = null;try {Options options = new Options();options.inJustDecodeBounds = true;BitmapFactory.decodeResource(res, resId, options);if (options.outHeight == 0) {return null;}options.inJustDecodeBounds = false;int hScale = options.outHeight / height;options.inSampleSize = hScale;options.inJustDecodeBounds = false;InputStream is = res.openRawResource(resId);b = BitmapFactory.decodeStream(is, null, options);} catch (OutOfMemoryError e) {System.gc();//回收内存}return b;}/** * 从内存卡读取图片(防止OOM) * @author YOLANDA * @param fileName * @param height * @return */public static Bitmap getBitmpFromSDCard(String fileName, int height) {Bitmap b = null;BitmapFactory.Options o2 = null;try {BitmapFactory.Options o = new BitmapFactory.Options();o.inJustDecodeBounds = true;FileInputStream fis;fis = new FileInputStream(fileName);BitmapFactory.decodeStream(fis, null, o);fis.close();int scale = o.outHeight / height;o2 = new BitmapFactory.Options();o2.inSampleSize = scale;fis = new FileInputStream(fileName);b = BitmapFactory.decodeStream(fis, null, o2);fis.close();} catch (IOException e) {} catch (OutOfMemoryError e) {System.gc();}return b;}

更多相关文章

  1. android为图片生成缩略图
  2. Android Fresco图片处理库用法API英文原文文档2-1(Facebook开源An
  3. Android 图片阴影处理分析!
  4. LinearLayout按下(pressed)或获取焦点(focused)时背景设置不同颜
  5. android之网络请求 -- 获取RecyclerView的列表项(图片 + 文字)
  6. Android系列之Post图片和数据
  7. Android 自定义camera压缩图片到指定大小
  8. iphone/android比较学习之──图片、文件、字符串

随机推荐

  1. Android(安卓)App 构建流程分析
  2. Android(安卓)自定义Switch开关按钮的样
  3. 使用Ant自动构建Android版本
  4. Android4开发入门经典 之 第十部分:多媒体
  5. 技术揭秘:Android究竟比iOS差在哪里?
  6. android 兼容API的检查
  7. Android(安卓)仿iphone提醒事项(一)
  8. 今日头条面试(android)
  9. Android中如何编译运行系统自带桌面Launc
  10. android支持的codec一览