Android 使用Bitmap将自身保存为文件,BitmapFactory从File中解析图片并防止OOM
1、使用Bitmap将自身保存为文件
public boolean saveBitmapAsFile(String name, Bitmap bitmap) {
File saveFile = new File(cacheDirectory, name); boolean saved = false;
FileOutputStream os = null;
try {
Log.d("FileCache", "Saving File To Cache " + saveFile.getPath());
os = new FileOutputStream(saveFile);
bitmap.compress(CompressFormat.PNG, , os);
os.flush();
os.close();
saved = true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} return saved;
}
2、BitmapFactory从File中解析图片并防止OOM
/** 获得与需要的比例最接近的比例 */
static int calculateInSampleSize(BitmapFactory.Options bitmapOptions, int reqWidth, int reqHeight) {
final int height = bitmapOptions.outHeight;
final int width = bitmapOptions.outWidth;
int sampleSize = ;
if (height > reqHeight || width > reqWidth) {
final int heightRatio = Math.round((float) height / (float) reqHeight);
final int widthRatio = Math.round((float) width / (float) reqWidth);
sampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
}
return sampleSize;
} public static Bitmap decodeImage(String filePath) {
/** Decode image size */
BitmapFactory.Options o = new BitmapFactory.Options();
/** 只取宽高防止oom */
o.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath, o); int scale=calculateInSampleSize(o, displayStats.maxItemWidthHeight, displayStats.maxItemWidthHeight); BitmapFactory.Options options=new BitmapFactory.Options();
/** Decode with inSampleSize,比直接算出options中的使用更少的内存*/
options.inSampleSize=scale;
/** 内存不足的时候可被擦除 */
options.inPurgeable = true;
/** 深拷贝 */
options.inInputShareable = true; synchronized (DDGControlVar.DECODE_LOCK) {
Bitmap result = BitmapFactory.decodeFile(filePath, options);
return result;
}
}
Android 使用Bitmap将自身保存为文件,BitmapFactory从File中解析图片并防止OOM的更多相关文章
- Android将程序崩溃信息保存本地文件
大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试,所以在程序发布出去之后,如果出现了 ...
- windows保存的文件传输到linux中格式转换
直接从window传输到linux的脚本执行时,会出现以下错误. -bash: xxx: /bin/sh^M: bad interpreter: No such file or directory 解 ...
- net 编译报错:编辑器或项目正在尝试签出在内存中修改的文件,这将导致保存该文件
1,报错提示: 编辑器或项目正在尝试签出在内存中修改的文件,这将导致保存该文件. 在生成过程中保存文件是危险的,这可能会在将来导致不正确的生成输出. 是否仍然继续签出? 2,原因:licenses.l ...
- Android新浪微博客户端(七)——ListView中的图片异步加载、缓存
原文出自:方杰|http://fangjie.info/?p=193转载请注明出处 最终效果演示:http://fangjie.sinaapp.com/?page_id=54 该项目代码已经放到git ...
- 解决Android解析图片的OOM问题!!!(转)
大家好,今天给大家分享的是解决解析图片的出现oom的问题,我们可以用BitmapFactory这里的各种Decode方法,如果图片很小的话,不会出现oom,但是当图片很大的时候 就要用BitmapFa ...
- Android 将Bitmap对象保存为png图片文件
输入:Bitmap对象.保存的路径.保存的文件名 注意路径的最后要带上 '/' 符号 private void saveBitmap(Bitmap bitmap,String path, Strin ...
- 【Android Developers Training】 25. 保存文件
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- Android音频处理——通过AudioRecord去保存PCM文件进行录制,播放,停止,删除功能
Android音频处理--通过AudioRecord去保存PCM文件进行录制,播放,停止,删除功能 音频这方面很博大精深,我这里肯定讲不了什么高级的东西,最多也只是一些基础类知识,首先,我们要介绍一下 ...
- 解决Android Studio 将String类型保存为.txt文件,按下button跳转到文件管理器(解决了保存txt文件到文件管理后,手机打开是乱码的问题)
不知道为什么保存文件后之前打开一直都OK,就突然打开看到变成乱码了,最后解决了 关键:outStream.write(finalContent.getBytes("gbk")); ...
随机推荐
- my-small.cnf my-medium.cnf my-large.cnf my-huge.cnf
my-small.cnf my-medium.cnf my-large.cnf my-huge.cnf 是 MySQL 默认的几个配置文件.针对不同配置的服务器可以使用不同的配置文件,将你需要的那一个 ...
- Cocos2dx 小技巧(十三)聊聊坐标系
一好友考上了空姐.她说:以后基本上不会回来了.等下次见面时请叫我白富美!尽管有点羡慕.但我依然不甘示弱回复:下次见面时请叫我高富帅! 未来,谁说得准呢? ------------------有段时间没 ...
- 8核 16g 及时释放内存空间
del 释放 大变量 所在内存空间 GB数据
- 代理ip proxy
import requestsimport timefrom selenium import webdriverfrom selenium.webdriver.chrome.options impor ...
- 异步编程错误处理 ERROR HANDLING
Chapter 16, "Errors and Exceptions," provides detailed coverage of errors and exception ha ...
- 【WIP】Objective-C Foundation框架的主要对象
创建: 2018/02/02 完成字符串: 2018/02/05 任务表: TODO 最新内容确认: 字符串,数据类, 数组类 可变与不变的对象 一览 种类 不变类 可变类 数组 NSA ...
- PHP中的连贯操作
连贯操作有什么好处?就是多行操作可以在一行之内完成,要进行连贯操作的方法必须返回$this,也就是当前类的对象实例,然后就可以进行连贯操作了,具体的实现代码如下所示. <?php /** * p ...
- bzoj 4585: [Apio2016]烟火表演【左偏树】
参考:https://blog.csdn.net/wxh010910/article/details/55806735 以下课件,可并堆部分写的左偏树 #include<iostream> ...
- 51nod 1220 约数之和【莫比乌斯反演+杜教筛】
首先由这样一个式子:\( d(ij)=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1]\frac{pj}{q} \)大概感性证明一下吧我不会证 然后开始推: \[ \sum_{i=1 ...
- mui 每次页面跳转用mui.openWindow会不会占用很大内存?
http://ask.dcloud.net.cn/question/5384 不能每次用mui.openWindow.不用的webview要close,一个webview被close后会露出其他没有被 ...