Android 笔记 ImageView 显示大图遇到的问题 以及 无损显示大图 的解决方案

在Android中,当尝试在ImageView中显示大图或长图时,可能会遇到显示空白的问题。这并非由于OOM错误,而是由于纹理的最大尺寸限制。解决方案包括关闭硬件加速、图片切割或使用Subsampling Scale Image View库。后者通过动态切割图片并根据需要绘制,实现了流畅的缩放和移动体验,同时避免了内存问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ImageView

制作一个显示图片的activity,类似相册那样的,可以移动图片,多点触控的时候放大缩小图片等功能

一般就是用BitmapFactory来解码bitmap,然后设置imageView.setImageBitmap()
但是遇到了一个问题,就是图片过大的时候(也没多大,也就是手机摄像头拍的照片,4128x3096,13M像素),真机运行会显示空白,什么都没有
但是模拟器运行正常,就是有一点卡。

在网上搜索的时候看到有一些解释
1,因为图片太大导致的OOM(out of memory)错误
在程序中设置try-catch并没有抓到这个错误,而且debug发现,在BitmapFactory解码图片以后,可以获取到Bitmap的信息,说明也许没有出现这个错误,图片的内存占用仍然在可取范围内

2,需要设置解码的option参数,inSampleSize
这个参数的意思是,把图像的长/宽缩小,再生成Bitmap,inSampleSize的数值是1,2,4这样的比例,然后长/宽就除以这个数值,那么总像素数就除以这个数值的平方

这样的话,内存占用就小了。实际测试的时候,4128X 3096的照片可以显示,内存占用的确小了很多。但是图像放大以后发现果然分辨率也小了。虽然放的不是很大的时候看起来没区别,但是更希望有个解决方案能显示原图的分辨率

而且&

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值