Android之Bitmap 高效加载
|
图片格式(Bitmap.Config) |
一张100*100的图片占用内存的大小 |
|
|
ALPHA_8 |
图片长度*图片宽度 |
100*100=10000字节 |
|
ARGB_4444 |
图片长度*图片宽度*2 |
100*100*2=20000字节 |
|
ARGB_8888 |
图片长度*图片宽度*4 |
100*100*4=40000字节 |
|
RGB_565 |
图片长度*图片宽度*2 |
100*100*2=20000字节 |
public static Bitmap getBitmapByPath(String path,int setWidth,int setHeight){
//创建一个空的Bitmap
Bitmap bitmap = null;
//获取Options对象
BitmapFactory.Options options = new BitmapFactory.Options();
//将inJustDecodeBounds属性设置为true,当inJustDecodeBounds属性为true的时候,BitmapFactory只会读取原始的宽高
//并不会真正的加载图片
options.inJustDecodeBounds = true;
//因为上边已经把inJustDecodeBounds属性设置为了true,所以这里不会真正的加载图片,只会读取原始的宽高
BitmapFactory.decodeFile(path, options);
//获取图片的原始高
int height =options.outHeight;
//获取图片原始的宽
int width = options.outWidth;
//声明一个原始的采样率
int getinSampleSize = 1;
//如果原始宽高大于目标宽高
if(height>setHeight || width>setWidth){
//取原始宽高的2/1
int halfHeight = height/2;
int halfWidth = width/2;
//根据条件来计算采样率
while ((halfHeight / getinSampleSize) >= setHeight && (halfWidth / getinSampleSize) >= setWidth) {
getinSampleSize *=2;
}
}
//将计算出来的采样率付给options.inSampleSize,使用使用计算出来的采样率
options.inSampleSize = getinSampleSize;
//将inJustDecodeBounds属性设置为false
options.inJustDecodeBounds = false;
//因为上边已经将inJustDecodeBounds属性设置为false,这里将真正的加载图片
bitmap = BitmapFactory.decodeFile(path,options);
return bitmap;
}
Android之Bitmap 高效加载的更多相关文章
- Android艺术——Bitmap高效加载和缓存代码分析(2)
Bitmap的加载与缓存代码分析: 图片的压缩 比如有一张1024*768像素的图像要被载入内存,然而最终你要用到的图片大小其实只有128*96,那么我们会浪费很大一部分内存,这显然是没有必要的,下面 ...
- Android艺术——Bitmap高效加载和缓存(1)
通过Bitmap我们可以设计一个ImageLoader,实现应该具有的功能是: 图片的同步加载:图片的异步加载:图片的压缩:内存缓存:磁盘缓存:网络获取: 1.加载 首先提到加载:BitmapFact ...
- Android开发之高效加载Bitmap
一.概述 在Android开发中,我们经常与Bitmap打交道,而对Bitmap的不恰当的操作经常会导致OOM(Out of Memory).这篇文章我们会介绍如何高效地在Android开发中使用Bi ...
- Android高效加载大图、多图解决方案,有效避免程序OOM
高效加载大图片 我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状.不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小.比如说系统图片库里展示的图片大都是 ...
- Android开发艺术探索》读书笔记 (12) 第12章 Bitmap的加载和Cache
第12章 Bitmap的加载和Cache 12.1 Bitmap的高速加载 (1)Bitmap是如何加载的?BitmapFactory类提供了四类方法:decodeFile.decodeResourc ...
- Android高效加载大图、多图解决方案,有效避免程序OOM(转)
本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工,英文好的朋友也可以直接去读原文. http://developer.android.com/training/displaying ...
- Android高效加载大图、多图解决方案,有效避免程序内存溢出现象
好久没有写博客了,今天就先写一个小的关于在Android中加载大图如何避免内存溢出的问题. 后面会写如何使用缓存技术的核心类,android.support.v4.util.LruCache来加载图片 ...
- Bitmap的加载和Cache
由于Bitmap的特殊性以及Android对单个应用所施加的内存限制,比如16M,这导致加载Bitmap的时候很容易出现内存溢出.比如以下场景: java.lang.OutofMemoryError: ...
- Android中一张图片加载后所占用内存大小的获取与测试
Android程序中一旦加载的图片比较多,就有可能出现Out of Memory而导致程序崩溃.这个一方面是因为Android系统本身对于每个单独的进程有内存大小的限制(有16M,64M,128M,2 ...
随机推荐
- vue+node+mongodb实现的页面
源代码地址:https://github.com/GainLoss/vue-node-mongodb 目前这个项目实现的是: 1.利用vue-cli实现前台页面的编写 (1)页面的跳转利用的是vue- ...
- IOS 控制器的数据传递 (顺传 and 逆传)
● 控制器之间的数据传递主要有2种情况:顺传和逆传 ➢ 顺传 ● 控制器的跳转方向: A ->C ● 数据的传递方向 : A -> C ● 数据的传递方式 : 在A的prepareFo ...
- selenium跳过https的问题
背景: 周六产品给我反馈:支付成功页面后会提示这个,问自动化为什么没有发现这样的问题 第一反应:这个地址肯定被举报了,我也肯定没有设置过安全链接,因为都没有见过这样的网址,如果有问题,应该会直接出错, ...
- 高阶函数 -------JavaScript
高阶函数 本文摘要:http://www.liaoxuefeng.com/ JavaScript的函数其实都指向某个变量.既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作 ...
- java基础面试题:try{}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
package com.swift; public class Try_Catch_Finally_Test { public static void main(String[] args) { /* ...
- WebViewJavaScriptBridge的原理解析
理解WebViewJavaScriptBridge原理 前提条件都是需要bridge在OC实例化,然后二者的互调才可以进行下去 _bridge = [WebViewJavascriptBridge b ...
- 理解Express 中间件
Express 中间件 Express程序基本上是一系列中间件函数的调用.中间件就是一个函数, 接受 req.res.next几个参数. 中间件函数可以执行任何代码, 对请求和响应对象进行修改, 结束 ...
- Java传值分析
public class Example{String str=new String("good");char[] ch={'a','b','c'};public static v ...
- Linux下面自动清理超过指定大小的文件
Linux下面自动清理超过指定大小的文件 思路:1)查找test目录下的所有的文件2)判断是否大于100M3)大于100M则清空 以byte为单位显示文件大小,然后和100M大小做对比. 100M换算 ...
- git bush的一些基础命令
git bush的一些基础命令(不区分大小写) 通过命令创建本地仓库 首先自己需要手动建一个文件夹用于本地仓库 进行如下输入,使用cd跳转到刚刚创建的文件夹中 之后再输入 git init 即可创建 ...