BitmapRegionDecoder加载大图实现

前言

BitmapRegionDecoder类是Android系统提供的用来操作超大图片的工具类,它能够根据用户指定的区域大小部分加载图片数据。我们知道Android里的图片加载是有要求的,必须要小于某个特定阈值,如果图片尺寸特别大解析到内存中就会超出这个阈值导致图片无法加载,BitmapRegionDecoder类能够很好的辅助开发者在手机小屏幕上展示超大尺寸图片。

实现效果

这里写图片描述

实现过程

先从网络上下载一份超大的《千里江山图》,直接作为图片资源设置到ImageView对象上,测试手机N5展示空白,并且在日志区提示如下日志,也就是说图片文件尺寸太大无法直接加载到内存中。

Bitmap too large to be uploaded into a texture (25245x1000, max=4096x4096)

现在使用自定义的ImageView控件来分块加载大图的部分,每次只加载不大于控件大小的部分来展示,通过监听用户在屏幕上的拖动来更新当前展示窗口里的图片部分,这样就好像把整幅图片都加在到内存中了。

在自定以的大图展示控件初始化时先定义BitmapRegionDecoder工具对象,这里把大图片资源放入到assets目录中,就可以通过InputStream输入流来读取图片数据。接着通过设置BitmapFactory.Options来只读取图片的长宽而不读取数据,记录下当前图片的实际尺寸。

public LargeImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    try {
        InputStream inputStream = context.getAssets().open("long_picture.jpg");

        // 初始化BitmapRegionDecoder
        mDecoder = BitmapRegionDecoder.newInstance(inputStream, false);
        BitmapFactory.Options options = new</
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值