Android 按指定大小读取图片的实例

 更新时间:2016年07月13日 15:47:29   投稿:lqh  
本文主要介绍Android 按指定大小读取图片,在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;
}

以上就是解决Android 读取图片大小显示的问题,有需要的朋友可以参考下。

相关文章

  • Android自定义View实现角度选择器

    Android自定义View实现角度选择器

    前几天在Google Photos查看照片,用了一下它的图片剪裁功能,于是我马上就被其界面和操作吸引。后来想模仿做一个和Google Photos裁图页面几乎一模一样的角度选择器,本文比较基础,在阅读本文前只需要掌握最基础的自定义View知识和Android事件知识。下面来一起学习下吧。
    2016-11-11
  • Android RxJava与Retrofit结合使用详解

    Android RxJava与Retrofit结合使用详解

    RxJava和Retrofit的结合使用估计已经相当普遍了,自己工作中也是一直都在使用。在使用的过程中我们都会对其进行封装使用,GitHub上也有很多封装好的项目可以直接拿来使用,其实对于开源框架的二次封装有时候针对不同的业务逻辑封装的过程中也多多少少有些不同
    2023-03-03
  • Android 访问文件权限的四种模式介绍

    Android 访问文件权限的四种模式介绍

    这篇文章主要介绍了Android 访问文件权限的四种模式介绍的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • Kotlin引用其他xml的view对象过程详解

    Kotlin引用其他xml的view对象过程详解

    这篇文章主要介绍了Kotlin中如何引用其他xml中的view对象,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-02-02
  • Assert.assertEquals()方法参数详解

    Assert.assertEquals()方法参数详解

    本文详细讲解了Assert.assertEquals()方法参数,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • Android Intent 用法全面总结及实例代码

    Android Intent 用法全面总结及实例代码

    这篇文章主要介绍了Android Intent 用法全面总结的相关资料,并附实例代码,需要的朋友可以参考下
    2016-09-09
  • Android手机悬浮窗口小案例

    Android手机悬浮窗口小案例

    这篇文章主要为大家详细介绍了Android手机悬浮窗口小案例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Android 实现页面跳转

    Android 实现页面跳转

    android使用Intent来实现页面跳转,接下来通过本文给大家分享Android 实现页面跳转的实例代码,需要的的朋友参考下吧
    2017-09-09
  • Android中Json数据读取与创建的方法

    Android中Json数据读取与创建的方法

    android 读取json数据,下面小编给大家整理有关Android中Json数据读取与创建的方法,需要的朋友可以参考下
    2015-08-08
  • Android带气泡的第三方Tab选项卡

    Android带气泡的第三方Tab选项卡

    这篇文章主要介绍了Android带气泡的第三方Tab选项卡的实例代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02

最新评论