iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >详解Android中Bitmap及其内存优化
  • 341
分享到

详解Android中Bitmap及其内存优化

androidbitmaproi 2023-05-31 09:05:52 341人浏览 独家记忆
摘要

小编这次要给大家分享的是详解Android中Bitmap及其内存优化,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。Android Bitmap详解及Bitmap的内存优化一、Bitmap:Bitmap

小编这次要给大家分享的是详解Android中Bitmap及其内存优化,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。

Android Bitmap详解及Bitmap的内存优化

一、Bitmap:

Bitmap是Android系统中的图像处理的最重要类之一。用它可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件。

常用方法:

  • public void recycle()  // 回收位图占用的内存空间,把位图标记为Dead
  • public final boolean isRecycled()  //判断位图内存是否已释放
  • public final int getWidth() //获取位图的宽度
  • public final int getHeight() //获取位图的高度
  • public final boolean isMutable() //图片是否可修改
  • public int getScaledWidth(canvas canvas) //获取指定密度转换后的图像的宽度
  • public int getScaledHeight(Canvas canvas) //获取指定密度转换后的图像的高度
  • public boolean compress(CompressFORMat format, int quality, OutputStream stream) //按指定的图片格式以及画质,将图片转换为输出流。
     format:压缩图像的格式,如Bitmap.CompressFormat.PNG或Bitmap.CompressFormat.JPEG
     quality:画质,0-100.0表示最低画质压缩,100以最高画质压缩。对于PNG等无损格式的图片,会忽略此项设置。
     stream: OutputStream中写入压缩数据。
     return: 是否成功压缩到指定的流。
  • public static Bitmap createBitmap(Bitmap src)  //以src为原图生成不可变得新图像
  • public static Bitmap createScaledBitmap(Bitmap src, int dstWidth, int dstHeight, boolean filter) //以src为原图,创建新的图像,指定新图像的高宽以及是否可变。
  • public static Bitmap createBitmap(int width, int height, Config config) //创建指定格式、大小的位图
  • public static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height) //以source为原图,创建新的图片,指定起始坐标以及新图像的高宽。
     

 二、BitmapFactory工厂类:

Option 参数类:

  • public boolean inJustDecodeBounds //如果设置为true,不获取图片,不分配内存,但会返回图片的高度宽度信息。如果将这个值置为true,那么在解码的时候将不会返回bitmap,只会返回这个bitmap的尺寸。这个属性的目的是,如果你只想知道一个bitmap的尺寸,但又不想将其加载到内存时。这是一个非常有用的属性。
  • public int inSampleSize //图片缩放的倍数,  这个值是一个int,当它小于1的时候,将会被当做1处理,如果大于1,那么就会按照比例(1 / inSampleSize)缩小bitmap的宽和高、降低分辨率,大于1时这个值将会被处置为2的倍数。例如,width=100,height=100,inSampleSize=2,那么就会将bitmap处理为,width=50,height=50,宽高降为1 / 2,像素数降为1 / 4。
  • public int outWidth //获取图片的宽度值
  • public int outHeight //获取图片的高度值 ,表示这个Bitmap的宽和高,一般和inJustDecodeBounds一起使用来获得Bitmap的宽高,但是不加载到内存。
  • public int inDensity //用于位图的像素压缩比
  • public int inTargetDensity //用于目标位图的像素压缩比(要生成的位图)
  • public byte[] inTempStorage  //创建临时文件,将图片存储
  • public boolean inScaled //设置为true时进行图片压缩,从inDensity到inTargetDensity
  • public boolean inDither  //如果为true,解码器尝试抖动解码
  • public Bitmap.Config inPreferredConfig  //设置解码器,这个值是设置色彩模式,默认值是ARGB_8888,在这个模式下,一个像素点占用4bytes空间,一般对透明度不做要求的话,一般采用RGB_565模式,这个模式下一个像素点占用2bytes。
  • public String outMimeType  //设置解码图像
  • public boolean inPurgeable //当存储Pixel的内存空间在系统内存不足时是否可以被回收
  • public boolean inInputShareable  //inPurgeable为true情况下才生效,是否可以共享一个InputStream
  • public boolean inPreferQualityOverSpeed  //为true则优先保证Bitmap质量其次是解码速度
  • public boolean inMutable  //配置Bitmap是否可以更改,比如:在Bitmap上隔几个像素加一条线段
  • public int inScreenDensity  //当前屏幕的像素密度
     

工厂方法:

  • public static Bitmap decodeFile(String pathName, Options opts)  //从文件读取图片
  • public static Bitmap decodeFile(String pathName)
  • public static Bitmap decodeStream(InputStream is)  //从输入流读取图片
  • public static Bitmap decodeStream(InputStream is, Rect outPadding, Options opts)
  • public static Bitmap decodeResource(Resources res, int id)  //从资源文件读取图片
  • public static Bitmap decodeResource(Resources res, int id, Options opts)
  • public static Bitmap decodeByteArray(byte[] data, int offset, int length)  //从数组读取图片
  • public static Bitmap decodeByteArray(byte[] data, int offset, int length, Options opts)
  • public static Bitmap decodeFileDescriptor(FileDescriptor fd) //从文件读取文件 与decodeFile不同的是这个直接调用JNI函数进行读取 效率比较高
  • public static Bitmap decodeFileDescriptor(FileDescriptor fd, Rect outPadding, Options opts)
     

Bitmap.Config inPreferredConfig :

枚举变量 (位图位数越高代表其可以存储的颜色信息越多,图像越逼真,占用内存越大)

  1. public static final Bitmap.Config ALPHA_8  //代表8位Alpha位图 每个像素占用1byte内存
  2. public static final Bitmap.Config ARGB_4444  //代表16位ARGB位图 每个像素占用2byte内存
  3. public static final Bitmap.Config ARGB_8888  //代表32位ARGB位图 每个像素占用4byte内存
  4. public static final Bitmap.Config RGB_565  //代表8位RGB位图 每个像素占用2byte内存

Android中一张图片(BitMap)占用的内存主要和以下几个因数有关:图片长度,图片宽度,单位像素占用的字节数。一张图片(BitMap)占用的内存=图片长度*图片宽度*单位像素占用的字节数。

三、Bitmap加载方式

Bitmap的加载方式有Resource资源加载、本地(SDcard)加载、网络加载等加载方式。

1. 从本地(SDcard)文件读取

方式一

 public static Bitmap readBitmapFromFile(String filePath, int width, int height) {   BitmapFactory.Options options = new BitmapFactory.Options();   options.inJustDecodeBounds = true;   BitmapFactory.decodeFile(filePath, options);   float srcWidth = options.outWidth;   float srcHeight = options.outHeight;   int inSampleSize = 1;   if (srcHeight > height || srcWidth > width) {     if (srcWidth > srcHeight) {       inSampleSize = Math.round(srcHeight / height);     } else {       inSampleSize = Math.round(srcWidth / width);     }   }   options.inJustDecodeBounds = false;   options.inSampleSize = inSampleSize;   return BitmapFactory.decodeFile(filePath, options); }

--结束END--

本文标题: 详解Android中Bitmap及其内存优化

本文链接: https://www.lsjlt.com/news/224511.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解Android中Bitmap及其内存优化
    小编这次要给大家分享的是详解Android中Bitmap及其内存优化,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。Android Bitmap详解及Bitmap的内存优化一、Bitmap:Bitmap...
    99+
    2023-05-31
    android bitmap roi
  • 详解Android内存泄露及优化方案
    目录一、常见的内存泄露应用场景?1、单例的不恰当使用 2、静态变量导致内存泄露 3、非静态内部类导致内存泄露 4、未取消注册或回调导致内存泄露 5、定时器Timer 和 TimerT...
    99+
    2024-04-02
  • 详解Android内存优化策略
    目录前言一、内存优化策略二、具体优化的点1.避免内存泄漏2.Bitmap等大对象的优化策略(1) 优化Bitmap分辨率 (2) 优化单个像素点内存 (3) Bitmap的缓存策略 ...
    99+
    2024-04-02
  • Java使用Redis及其优化详解
    目录前言开启远程连接Jedis连接Redis封装Jedis进行操作前言 所有坚韧不拔的努力迟早会取得报酬的。—— 安格尔 开启远程连接 Redis默认是不支持远程连接的,这里需要手动...
    99+
    2024-04-02
  • Android项目中如何优化Bitmap的加载
    Android项目中如何优化Bitmap的加载?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一 . 高效加载 BitmapBitMapFactory 提供了四类方法: deco...
    99+
    2023-05-31
    android bitmap roi
  • 浅谈Android性能优化之内存优化
    目录1、Android内存管理机制1.1 Java内存分配模型1.2 Dalvik和ART介绍1.3 为什么要进行内存优化2、Java内存回收算法2.1判断Java中对象是否存活的算...
    99+
    2024-04-02
  • C++ 函数优化详解:如何优化内存分配?
    优化 c++++ 内存分配:使用内存池: 预先分配特定大小的对象,减少创建和销毁开销。使用对象池: 存储已创建对象,便于重用,避免频繁分配。使用自定分配器: 优化标准库分配器的行为。避免...
    99+
    2024-05-03
    c++ 内存优化 标准库
  • Android 中app内存回收优化(二):S 版本
    版本基于:Android S 0. 前言 Android Q 中新增了framework 端app 内存回收优化方案。当app 的 oom adj 发生特定变化时,framework 端会对应用的内存进行处理。随着版本的演变,这部分优化...
    99+
    2023-09-10
    android CachedAppOpt OomAdjuster AppCompact ProcessReclaim
  • Android性能优化之内存优化的示例分析
    这篇文章主要介绍Android性能优化之内存优化的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、Android内存管理机制1.1 Java内存分配模型先上一张JVM将内存划分区域的图程序计数器:存储当前线...
    99+
    2023-06-15
  • android内存优化的技巧有哪些
    以下是一些Android内存优化的技巧: 使用更少的内存占用的数据结构:例如使用SparseArray替代HashMap、使用S...
    99+
    2023-10-26
    android
  • 详解Android Lint的原理及其使用
    Android Lint 原理及使用详解 Android Lint 是 ADT 16中引入的新工具,用于扫描 Android 项目源中的潜在错误。 Lint 是 Android 提...
    99+
    2024-04-02
  • Android性能优化之弱网优化详解
    目录弱网优化1、Serializable原理1.1 分析过程1.2 Serializable接口1.3 ObjectOutputStream1.4 序列化后二进制文件的一点解读1.5...
    99+
    2022-11-13
    Android 性能弱网优化 Android 弱网优化
  • 详解Android性能优化之启动优化
    目录1、为什么要进行启动优化2、启动的分类2.1 冷启动2.2 热启动2.3 温启动3、优化方向4、启动时间的测量方式4.1 使用adb 命令方式(线下使用方便)4.2 手动打点方式...
    99+
    2024-04-02
  • Android Gradle同步优化详解
    目录背景方法论数据结构缓存最有意思但最难的问题动态修改gradle配置hook agp ProjectsServices方法签名检查是否存在support包总结背景 年初开始我们就开...
    99+
    2024-04-02
  • Android中将Bitmap对象以PNG格式保存在内部存储中的方法
    在Android中进行图像处理的任务时,有时我们希望将处理后的结果以图像文件的格式保存在内部存储空间中,本文以此为目的,介绍将Bitmap对象的数据以PNG格式保存下来的方法。1、添加权限由于是对SD card进行操作,必不可少的就是为你的...
    99+
    2023-05-30
    android bitmap roi
  • Android性能优化之JVMTI与内存分配
    目录前言JVMTIJVMTI 简介:native层开启jvmti前置准备复写Agent开启jvmtiCapabilities设置jvmtiEventCallbacks开启监听java...
    99+
    2024-04-02
  • Android 内存优化知识点梳理总结
    目录RAM 和 ROM常见内存问题内存溢出内存泄漏常见内存泄漏场景静态变量或单例持有对象非静态内部类的实例生命周期比外部类更长导致的内存泄漏Handler 导致的内存泄漏postDe...
    99+
    2024-04-02
  • Android 内存泄漏的常见原因及其对应的解决方案
    Android 内存泄漏 Android应用程序中常见的内存泄漏原因有很多,以下是一些常见的原因及对应的解决方案: 1. 静态引用导致的内存泄漏: 静态变量持有对Activity或Fragment的引...
    99+
    2023-09-15
    android
  • 怎么在Android应用中利用Bitmap对图片进行优化
    这篇文章给大家介绍怎么在Android应用中利用Bitmap对图片进行优化,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前言在Android开发过程中,Bitmap往往会给开发者带来一些困扰,因为对Bitmap操作不慎...
    99+
    2023-05-31
    android roi bitmap
  • C++中内存分区及其作用分析
    目录术语一、文本区(Text Segment)/代码区二、数据区(Data Segment)/全局区三、栈区(Stack Segment)四、堆区(Heap Segment)举例术语...
    99+
    2023-05-16
    C++内存四大分区 C++内存分区
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作