文档章节

加载大图片,防内存溢出

cuncaojin
 cuncaojin
发布于 2015/06/11 00:15
字数 192
阅读 47
收藏 0

精选30+云产品,助力企业轻松上云!>>>

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.view.Display;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void click(View v){
        Options opt = new Options();
        //不解析像素信息,只解析图片宽高
        opt.inJustDecodeBounds = true;
        //不再解析像素信息,就不需要申请内存
        BitmapFactory.decodeFile("sdcard/dog.jpg", opt);
        
        //获取图片宽高
        int imageWidth = opt.outWidth;
        int imageHeight = opt.outHeight;
        
        //获取屏幕宽高
        Display dp = getWindowManager().getDefaultDisplay();
        int screenWidth = dp.getWidth();
        int screenHeight = dp.getHeight();
        
        //计算缩放比例
        int widthScale = imageWidth / screenWidth;
        int heightScale = imageHeight / screenHeight;
        
        //最终使用的缩放比例
        int scale = 1;
        if(widthScale >= heightScale && widthScale > 1){
            scale = widthScale;
        }
        else if(widthScale < heightScale && heightScale > 1){
            scale = heightScale;
        }    
        
        opt.inSampleSize = scale;
        opt.inJustDecodeBounds = false;
        //先缩小,再加载
        Bitmap bm = BitmapFactory.decodeFile("sdcard/dog.jpg", opt);
        
        ImageView iv = (ImageView) findViewById(R.id.iv);
        iv.setImageBitmap(bm);
    }

}

cuncaojin
粉丝 1
博文 45
码字总数 2950
作品 0
郑州
私信 提问
加载中
请先登录后再评论。
Android-加载大图片

在开发之中会遇到,加载小图片没问题,当加载大图片的时候,内存溢出,为了解决这个问题,Android是提供了API 来处理优化图片的方式解决,就是计算屏幕宽高 和 图片宽高 的缩放比例,进行缩放...

osc_lt3ocv4d
2018/12/21
1
0
android之图片异步加载并缓存到本地

在android项目中访问网络图片是非常普遍性的事情,如果我们每次请求都要访问网络来获取图片,会非常耗费流量,而且图片占用内存空间也比较大,图片过多且不释放的话很容易造成内存溢出。针对...

感觉太煽情
2015/09/24
461
0
如何在JPanel上快速有效地加载图片

不知道大家在用Java写UI界面的时候有没有遇到过想这样的问题:在一个面板(JPanel)上添加图片就像这样: 当你在调用repaint()让面板上显示另一张图片的时候,第二张照片就直接draw在第一张的...

mr桀骜不驯
2012/09/20
3.7K
7
android异步加载图片并缓存到本地实现方法

在android项目中访问网络图片是非常普遍性的事情,如果我们每次请求都要访问网络来获取图片,会非常耗费流量,而且图片占用内存空间也比较大,图片过多且不释放的话很容易造成内存溢出。针对...

带梦想一7飞
2014/05/04
167
0
Android中图片的三级缓存

为什么要使用三级缓存 如今的 Android App 经常会需要网络交互,通过网络获取图片是再正常不过的事了 假如每次启动的时候都从网络拉取图片的话,势必会消耗很多流量。在当前的状况下,对于非...

LppLbb
2016/08/23
8
0

没有更多内容

加载失败,请刷新页面

加载更多

Java知识点--卫语句

在《阿里巴巴Java开发手册》中强制规定:超过 3 层的 if-else 的逻辑判断代码可以使用卫语句、策略模式、状态模式等来实现,其中卫语句即代码逻辑先考虑失败、异常、中断、退出等直接返回的情...

HLee
7分钟前
0
0
实施与扩展:何时使用? 有什么不同? - Implements vs extends: When to use? What's the difference?

问题: 请用一种易于理解的语言或一些文章的链接进行解释。 解决方案: 参考一: https://stackoom.com/question/jTkh/实施与扩展-何时使用-有什么不同 参考二: https://oldbug.net/q/jTkh/...

技术盛宴
8分钟前
0
0
剑指offer之队列中的最大值(C++/Java双重实现)

1.题目描述 请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。 若队列为空,pop_front 和 max_value 需要返回...

osc_jvzgahav
10分钟前
0
0
JAVA-过滤器和拦截器1

1、过滤器 (Filter) 过滤器的配置比较简单,直接实现 Filter 接口即可,也可以通过 @WebFilter 注解实现对特定 URL 拦截,看到 Filter 接口中定义了三个方法。 init() :该方法在容器启动初始...

osc_hinb5m98
12分钟前
0
0
模拟红包算法(基于BigDecimal、DecimalFormat、Random类)

基于BigDecimal、DecimalFormat、Random实现模拟红包算法 RedPacket 类 import java.math.BigDecimal;import java.text.DecimalFormat;import java.util.ArrayList;import java.util.Rand......

osc_ml6lx2h4
13分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部