android开发之图片格式、图片内存计算、图片内存管理

本文介绍了Android开发中常用的图片格式及其特点,包括JPEG、PNG、BMP、GIF和WebP,并详细解释了不同格式的适用场景。此外,还讨论了图片文件大小对比和内存计算方法,以及不同Android版本下Bitmap内存管理的变化。

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

咱们在android开发中会经常用到图片,那么就会经常遇到图片格式上的选择问题

根据官方说明,支持的图片格式有JPEG、PNG、BMP、GIF、WebP


说明:
JPEG:有损压缩格式,不支持透明。
PNG:无损压缩位图图形格式,支持透明背景和Alpha透明度
BMP:Window系统中的图片格式,无任何压缩,所以意味着BMP文件会是巨大的
GIF:位图图形格式,背景可透明,无损压缩可使用多帧实现动画效果,最多只能存储256种不同的颜色
WebP:google提供,可选择性的有损或者无损压缩,支持透明,支持动画,无损webp支持alpha通道,缺点是android4.0才开始支持webp,4.2.1开始支持无损webp


文件大小:

对于JPEG、PNG、BMP、Gif的文件大小对比可以参考StackOverFlow的帖子:
至于WebP,据 A new image format for the Web 官方说明介绍,webp无损压缩会比png小26%,有损webp会比jpeg小25%到34%,主要得益于webp更优的压缩算法


图片内存计算:

内存=图片长度*图片宽度*单位像素占用的字节数:比如一张100*100的图片,单位像素占用4字节,那么就是100*100*4=40000字节
至于单位像素占用字节数(1byte=8bites):
ALPHA_8只有ALPHA占用8bites,没有RGB值,每像素占用1字节
ARGB_4444ARGB四个值各占用4bites,每像素占用2字节,质量太差,已弃用
ARGB_8888ARGB各占用8bites,每像素占用4字节
RGB_565无APLHA,RGB分别占用5、6、5bites,每像素占用2字节

Bitmap内存管理:

android Bitmap内存管理演变过程
在android2.2以及更低版本中,当GC开始工作时,app线程是停止工作的,会导致性能问题,Android2.3增加了GC并发,就意味着Bitmap不被引用了之后,很快就会被GC回收。
在android2.3.3及更低版本中,位图的像素数据存储在本机内存中,这个和存储在Dalvik堆中的位图是分开的,所以它的释放是不可控制的,可能会导致app超出内存限制甚至崩溃,从android3.0开始,像素数据和位图都存储在Dalvik堆中
android各版本Bitmap内存管理
在android2.3.3及更低版本中,建议使用recycle(),不过只有保证Bitmap不再使用的情况下。

在android3.0中及更高版本中,使用BitmapFactory.Options.inBitmap属性,可以实现位图重用,可以保存一个位图供后边使用


参考文档:
1. Supported Media Formats android官方支持媒体格式说明
2. Bitmap.Config 官方bitmap内存说明概要
3. Managing Bitmap Memory 官方图片内存管理说明
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值