博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android -- 加载大图片的方法
阅读量:6151 次
发布时间:2019-06-21

本文共 2015 字,大约阅读时间需要 6 分钟。

在android中要加载一张大图片到内存中如果通过如下方式进行:

Bitmap bitmap= BitmapFactory.decodeFile("/sdcard/a.jpg");iv.setImageBitmap(bitmap);

则会抛出内存溢出异常Caused by: java.lang.OutOfMemoryError

正确的做法应该是这样的:

public class MainActivity extends Activity {    private ImageView iv;    private int windowHeight;    private int windowWidth;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        iv = (ImageView) findViewById(R.id.iv);        WindowManager win = (WindowManager) getSystemService(WINDOW_SERVICE);        windowHeight = win.getDefaultDisplay().getHeight();        windowWidth = win.getDefaultDisplay().getWidth();    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    public void load(View view) {            /*     Bitmap bitmap= BitmapFactory.decodeFile("/sdcard/a.jpg");         iv.setImageBitmap(bitmap);*/                 // 图片解析的配置        BitmapFactory.Options options = new Options();        // 不去真的解析图片,只是获取图片的头部信息宽,高        options.inJustDecodeBounds = true;        BitmapFactory.decodeFile("/sdcard/a.jpg", options);        int imageHeight = options.outHeight;        int imageWidth = options.outWidth;        // 计算缩放比例        int scaleX = imageWidth / windowWidth;        int scaleY = imageHeight / windowHeight;        int scale = 1;        if (scaleX > scaleY & scaleY >= 1) {            scale = scaleX;        }else if (scaleY > scaleX & scaleX >= 1) {            scale = scaleY;        }        //真的解析图片        options.inJustDecodeBounds=false;        //设置采样率        options.inSampleSize=scale;        Bitmap bitmap=BitmapFactory.decodeFile("/sdcard/a.jpg", options);        iv.setImageBitmap(bitmap);    }}

在这种情况下,是将大分辨率的图片按照一定的比例缩小然后加载进内存,就不会出现内存溢出的现象了。

 

本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3744876.html,如需转载请自行联系原作者

你可能感兴趣的文章
我的友情链接
查看>>
PCS子层有什么用?
查看>>
查看端口,关闭端口
查看>>
linux:yum和apt-get的区别
查看>>
Sentinel 1.5.0 正式发布,引入 Reactive 支持
查看>>
数据库之MySQL
查看>>
2019/1/15 批量删除数据库相关数据
查看>>
数据类型的一些方法
查看>>
Mindjet MindManager 2019使用教程:
查看>>
详解 CSS 绝对定位
查看>>
AOP
查看>>
NGUI Label Color Code
查看>>
.NET Core微服务之基于Polly+AspectCore实现熔断与降级机制
查看>>
vue组件开发练习--焦点图切换
查看>>
浅谈OSI七层模型
查看>>
Webpack 2 中一些常见的优化措施
查看>>
移动端响应式
查看>>
python实现牛顿法求解求解最小值(包括拟牛顿法)【最优化课程笔记】
查看>>
js中var、let、const的区别
查看>>
腾讯云加入LoRa联盟成为发起成员,加速推动物联网到智联网的进化
查看>>