Android 按指定大小读取图片的实例
作者:lqh 发布时间:2022-06-16 18:26:25
标签:Android,图片,指定大小
在Android开发中,我们经常遇到Android读取图片大小超过屏幕显示的图(一般只要显示一定规格的预览图即可),在图片特别多或者图片显示很频繁的时候要特别注意这个问题,下面介绍个按指定大小读取图像的方法。
实现原理:首先获取图片文件的图像高和宽,如果小于指定比例,则直接读取;如果超过比例则按指定比例压缩读取。
捕获OutOfMemoryError时注意点:后面返回的是null,不要马上从别的地方再读图片,包括R文件中的,不然依然会抛出这个异常,一般在初始化的时候缓存默认图片,然后显示缓存中的图片。
/** 获取图像的宽高**/
public static int[] getImageWH(String path) {
int[] wh = {-1, -1};
if (path == null) {
return wh;
}
File file = new File(path);
if (file.exists() && !file.isDirectory()) {
try {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
InputStream is = new FileInputStream(path);
BitmapFactory.decodeStream(is, null, options);
wh[0] = options.outWidth;
wh[1] = options.outHeight;
}
catch (Exception e) {
Log.w(TAG, "getImageWH Exception.", e);
}
}
return wh;
}
public static Bitmap createBitmapByScale(String path, int scale) {
Bitmap bm = null;
try {
//获取宽高
int[] wh = getImageWH(path);
if (wh[0] == -1 || wh[1] == -1) {
return null;
}
//读取图片
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = Math.max(wh[0]/scale, wh[1]/scale);
InputStream is = new FileInputStream(path);
bm = BitmapFactory.decodeStream(is, null, options);
}
catch (Exception e) {
Log.w(TAG, "createBitmapByScale Exception.", e);
}
catch (OutOfMemoryError e) {
Log.w(TAG, "createBitmapByScale OutOfMemoryError.", e);
//TODO: out of memory deal..
}
return bm;
}


猜你喜欢
- 本文实例介绍了手机号码归属地接口调用基于C#实现,分享给大家供大家参考,具体内容如下using System;using System.Co
- 什么是枚举?枚举是JDK5引入的新特性。在某些情况下,一个类的对象是固定的,就可以定义为枚举。在实际使用中,枚举类型也可以作为一种规范,保障
- 静默安装就是偷偷的把一个应用安装到手机上,就是屏蔽确认框,通过反射只能写个主要的代码,这个是在linux编译用到,因为静默安装需要调用系统服
- 本文实例讲述了C#采用FileSystemWatcher实现监视磁盘文件变更的方法。分享给大家供大家参考。具体实现方法如下:简化需求:有一个
- 前言:最新Servlet 3.0 * 的使用1.pom.xml添加需要使用的依赖<project xmlns="http:/
- 前言2016年3月修改,结合自己的工作和平时学习的体验重新谈一下为什么要进行代码优化。在修改之前,我的说法是这样的:就像鲸鱼吃虾米一样,也许
- 一、引言在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文
- 想必我们在做项目的时候,都会遇到服务端与客户端交互数据。一般情况下我们都会采用json格式或者xml格式,将服务端的数据转换成这两种格式之一
- 1.新建一个数组,把原来数组的内容搬到新数组中。这种方法实现的思路是:先新建一个数组(前提条件是长度得比原来的长),然后把原来数组的内容搬到
- 前言在日常的开发中StringBuilder大家肯定都有用过,甚至用的很多。毕竟大家都知道一个不成文的规范,当需要高频的大量的构建字符串的时
- 安装容易出现的问题以及解决方法:1、更新sdk时可能无法连接服务器,可在C:\WINDOWS\system32\drivers\etc下的h
- 访问权限符:(1)public:对于成员来说:任何其他类都可以访问它们,不管在同一个包中还是在另外的包中。对于类来说:  
- 本文实例为大家分享了Android QQ运动步数的具体代码,供大家参考,具体内容如下今天我们实现下面这样的效果:首先自定义属性:<?x
- JAVA简单写学生信息管理系统,实现学生信息的输入、查询、修改、删除操作package Week;import jdk.internal.u
- using System; using System.Drawing; using System.Windows.Forms; using
- 文章开始之前,先看一下效果图,看是不是您正所需要的:一、构建计算器的界面要构建出一个好看点的计算器界面,还是需要颇费些小心思的,我做这个的时
- HashMap的keySet()方法比较简单,作用是获取HashMap中的key的集合。虽然这个方法十分简单,似乎没有什么可供分析的,但真正
- 今天在工作中突然遇到这个问题,开始郁闷得不行,查阅了很多资料才解决。话不多少先上图①解决连接超时问题1:在Linux下输入命令ifconfi
- 正则: “.”和"\""."点儿,在正则表达式中表示任意一个字符。"\"在正则表
- Maven可以使用mvn package指令对项目进行打包,如果使用java -jar xxx.jar执行运行jar文件,会出现"