android高级之图片二次采样

Android图片的二次采样 为什么要进行二次采样? 在手机上显示一张分辨率特别大的图片和显示一张分辨率小的图片,对用户的视觉体验来说,并不会有多大变化,但是对我们手机的内存来说,影响却是非常巨大的。,二次采样就是为了避免图片加载时的内存溢出异常。 二次采样分别是哪两次 1.第一次采样 第一次采样我主要是想要获得图片的压缩比例,假如说我有一张图片是200*200,那么我想把这张图片的缩略图显示在一个50*50的Image... 阅读详情

今天咋们来学习图片的二次采样,那什么是图片的二次采样呢?为什么要采样呢?那么分两点来学习图片的二次采样:

一、为什么要二次采样

默认情况下,bitmap每个像素点占用4个字节(ARGB_8888),比如一张3543×3503的图片差不多在内存中占用47M
安卓系统给每个应用分配的内存都是有限的,可以使用Runtime.getRuntime().maxMemory()来获取

内存有限空间,默认情况下图片存储又需要大量的空间,于是就容易产生OOM(内存溢出)

二、二次采样的实现(这里我封装成了一个方法,使用时需要传入图片的资源id和宽和高的像素)

/**@param id 需要压缩的图片的资源id
  *@param maxw 需要压缩图片后宽的像素
  *@param maxh 需要压缩图片后高的像素
  */

private Bitmap getCompressBm(int id,int maxw,int maxh) {
    Bitmap bm = null;
    int iSamplesize = 1;

     //只采样边框
    BitmapFactory.Options bitmapFactoryOptions = new BitmapFactory.Options();
    bitmapFactoryOptions.inJustDecodeBounds = true;
    bm = BitmapFactory.decodeResource(getResources(), id, bitmapFactoryOptions);
    int iWidth = bitmapFactoryOptions.outWidth;
    int iHeight = bitmapFactoryOptions.outHeight;

     //对缩放比例进行调整,直到宽和高符合我们要求为止
    while (iWidth > w|| iHeight > h){
        iSamplesize = iSamplesize*2;
        iWidth = iWidth/iSamplesize;
        iHeight = iHeight/iSamplesize;
     }
    bitmapFactoryOptions.inSampleSize = iSamplesize;

   //把inJustDecodeBounds置为false
    bitmapFactoryOptions.inJustDecodeBounds = false;

    // 设置像素颜色信息
    bitmapFactoryOptions.inPreferredConfig = Bitmap.Config.RGB_565;

    bm = BitmapFactory.decodeResource(getResources(),id, bitmapFactoryOptions);


    return bm;//返回压缩后的照片
}


android 图片压缩技术 见解 Android 高级工程师进阶 ~ 网易云课堂 学习笔记 学会图片终极压缩,快速处理项目中的复杂业务 【直播主题】 Android黑科技,图片终极压缩 【直播大纲】 1、浅谈Luban图片压缩框架,开启造轮子之路 2、详解架构思路和像素压缩、质量压缩的核心原理 3、项目中的复杂业务该如何处理 戳此链接占座:https://url.163.com/rKN Android 黑科技:图片终极压缩 支持自... 阅读详情

相关推荐

三级缓存与二次采样协同优化图像加载实战案例

htmltable {th, td {th {pre {简介:在移动开发与图像处理中,三级缓存和二次采样是提升性能、降低资源消耗的关键技术。三级缓存通过内存(如LruCache)、文件和网络多级存储机制,加快图片读取速度;二次采样则通过对大图进行下采样,快速生成适合屏幕显示的缩略图,避免OOM问题并提升加载效率。本文结合两者,在图片加载场景中实现高效显示方案:优先从缓存获取适配尺寸的图片,未命中时先采样展示低分辨率版本,并异步加载高清原图。

weixin_42561464的博客 1062

Android内存优化图片二次采样

day26 lrucahe 图片的二次采样 - 软引用 当内存不足时 自动回收 弱虚引用 当只有弱虚引用指向的时候就会被回收 不再合适的原因: 应用程序当内存不足可以申请内存 所以 android 除了 新的 lrucache Lrucache 最后参数不指定 一般是 指数量 键通常为 String 值通常为 bitmap 概念:最不常用的,最先被删除,当size 超出

java_goodstudy的博客 614

安卓高效图片压缩技术与内存优化实战

Override// 1/8 总内存否则默认缓存太小,白白浪费性能。graph TDA[开始加载图片] --> B{是否有缓存?B -- 是 --> C[从LruCache获取Bitmap]C --> D[设置到ImageView]B -- 否 --> E[启动异步任务]F --> G[存入LruCache]G --> DH[用户点击查看原图] --> I[Glide加载高清图]I --> J{内存缓存存在?J -- 是 --> K[直接显示]

weixin_33072399的博客 1067

Android开发中图片二次采样(sd卡中图片)

MainActivity: package animtest.com.example.e531.myapplication; import android.Manifest; import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.graphics.BitmapFa...

baipenggui_bo 456

Android图片压缩技术与实现教程

在处理图片资源时,尤其是在Android平台上,内存管理是开发者必须面对的一个挑战。是BitmapFactory的一个属性,它允许开发者以原始图片的部分像素来创建图片的缩略图。实质上,它通过减少加载到内存中的图片的像素数量,来达到减少内存使用的目的。的值表示了图片高度和宽度的缩放比例。如果为2,则最终加载的图片尺寸将为原始尺寸的一半,因此内存消耗也减少为原来的四分之一。

weixin_30591519的博客 799

Android简单图片浏览器实战教程

本文还有配套的精品资源,点击获取 简介:开发一个简单的图片浏览器对于Android初学者来说是一个基础而实用的任务,有助于理解Android应用开发的基础实践。本项目名为"andriod简单的图片浏览器",通过提供源码,帮助新手学习如何在Android环境中展示和浏览图片。项目可能包括自定义ImageView组件以支持手势识别,并使用 BitmapFactory.O...

weixin_35835018的博客 1243

Android Bitmap二次采样

Bitmap二次采样 一、二次采样: (一)、意义或目的: 1、用BitmapFactory解码一张图片时,有时会遇到该错误。这往往是由于图片过大造成的。要想正常使用,则需要分配更少的内存空间来存储。BitmapFactory.decodeFile(imageFile); 2、BitmapFactory.Options.inSampleSize:设置恰当的inSampleSize可以使BitmapFactory分配更少的空间以消除该错误。 3、BitmapFactory.Options提供了另一个成员inJ

yanhuomatou2015的博客 443

图片二次采样

加载大图片时,对图片进行二次采样

Android开发之Bitmap二次采样

(了解)计算机图形表示原理 图片:宽  高                                                                                                                        图片是由每个像素点来组成   像素点:小方块  图片的大小:宽*高*每个像素点的大小   (掌握)从Sd...

_万能的博哥的博客 580

android大位图二次采样处理三

3 android 大位图二次采样处理三

Android BitmapFactory图片压缩处理(大位图二次采样压缩处理)

Listview中图片的压缩处理后,成功避免了曾出现的OOM异常。 可以查看我的博客文章:http://blog.youkuaiyun.com/u012440207/article/details/37910047

Android 图片二次采样、质量压缩

Android 图片二次采样、质量压缩 2015-11-21 19:33 2161人阅读 评论(0) 收藏 举报  分类: 安卓高级(13)  版权声明:本文为博主原创文章,未经博主允许不得转载。 引言: Android系统支持几种图片(.png (preferred), .jpg (acceptable), .gif (disc

王人冉的博客 534

UG476 GT Transceivers文档翻译和自身理解

对UG476 Xilinx官方文档进行翻译的基础上加上自己的理解

weixin_45143788的博客 4598

Android 深度缩放图片库终极指南:如何完美展示超大图片

想要在Android应用中展示超高分辨率图片却总是遇到内存溢出问题?🤔 深度缩放图片库(Subsampling Scale Image View)正是解决这一痛点的完美方案!这个强大的Android库专为展示超大图像而设计,支持高达20,000x20,000像素的图片,让你轻松构建专业的图片浏览应用。 ## 🚀 为什么选择深度缩放图片库? 在移动应用中处理大尺寸图片时,传统方法往往会遇到内

gitblog_00443的博客 737

写出GD32L233/235在读写flash的区别(用于OTA功能)

在单片机里面表示 大概是 address += sizeof(uint32_t) address += sizeof(uint64_t)1.说到OTA功能,实际上 往flash 指定区域写 数据, 拷贝数据,然后 跳转, 必要时 注意单片机的偏移量。在写本文时,L233支持单字写入,而L235只有双字写入. 一个写入地址+4 一个写入地址+8。这个是 自己写的擦除一页 数据,当然可以参考 提供的demo去实现,看自己需求。接下来是 读取 双字,也就是在L235上的读取。

teleger的博客 908

5分钟搞定三网话费余额查询:手把手教你用PHP+HTML搭建查询系统(含API调用避坑指南)

本文详细介绍了如何使用PHP+HTML快速搭建三网话费余额查询系统,涵盖API调用避坑指南、前端UI设计及性能优化。通过统一处理移动、电信、联通三大运营商接口差异,实现高可用查询功能,并提供安全防护与生产部署建议,帮助开发者高效构建稳定可靠的话费查询工具。

weixin_29016833的博客 259

最新安卓版本对照表,API对照表(持续更新,更新到安卓17)

话不多说,直接上表,持续更新(更新到安卓16)。 列出了所有记录的可能会影响应用开发者的功能和行为变更。请使用此列表查找影响您的变更,然后点击相应的链接以阅读文档。下表列出了所有记录的可能会影响应用开发者的功能和行为变更。请使用此列表查找影响您的变更,然后点击相应的链接以阅读文档。Java 和 OpenJDK 是 Oracle 及/或其关联公司的商标或注册商标。

雨季余静的博客 9万+

【spark源码修改】hive3.1.3 spark3.5.4编译,需要修改源码,最终编译成功

【spark源码修改】hive3.1.3 spark3.5.4编译,需要修改源码,最终编译成功,附带问题分析详细过程

spark_dev的博客 1912

Android中图片的压缩

Android中的图片一般在内存中显示是以位图的方式实现的,在磁盘上主要以扩展名为.jpeg,.png,.webp格式的文件存储。 图片占用的空间分为内存空间和磁盘空间。内存空间即从磁盘或网络读取图片加载到内存中所占用的内存字节数大小。磁盘空间即一张存放在手机存储介质里的一张图片占用存储介质的字节数。 内存空间和磁盘空间是两个完全不同的概念,但是很多初学者甚至工作3年以上的都没有搞清楚这件事情,

Coder_android 822

从零到一:基于DESeq2的转录组差异表达分析实战指南

本文详细介绍了基于DESeq2的转录组差异表达分析实战指南,涵盖数据准备、标准化处理、差异分析及结果解读等关键步骤。DESeq2凭借其稳定性和对低表达基因的友好处理,成为转录组数据分析的首选工具。文章还提供了常见问题排查和优化建议,帮助研究者高效完成从分析到发表的完整流程。

weixin_26759093的博客 272

SAP_SD模块销售开票计划预收款系统配置及前台操作说明

在 SAP SD 中,开票计划(Billing Plan)是一种允许根据时间节点或里程碑对销售订单进行分期开票的功能。其中最常见的一种应用就是预收款(Down Payment Billing),即在销售订单中直接定义某个百分比或金额作为预收款,系统在开票时自动生成预收账单。大额合同或长期项目型销售(先收 20%,交货前收 30%,交货后收 50%)。分期付款模式(分阶段收款)。必须预收款才能安排生产或交货的业务。后台路径:SPRO—销售与分享—销售—销售凭证—销售凭证项目—定义项目类别。

我小时候很黑的博客 1409

android 图片优化

Drawable 与 BitmapDrawable     作为Android平下通用的图形对象,它可以装载常用格式的图像,比如GIF、PNG、JPG,当然也支持BMP,当然还提供一些高级的可视化对象,比如渐变、图形等Bitmap      称作位图,一般位图的文件格式后缀为bmp,当然编码器也有很多如RGB565、RGB888。作为一种逐像素的显示对象执行效率高,但是缺点也很明显存储效率低。我们...

qq_36346494的博客 738

【微服务】SpringBoot 对接飞书审批流程使用详解

SpringBoot 对接飞书审批流程使用详解

congge_study的博客 3771

foobar android 目录,最强手机音乐播放器?Foobar2K安卓版体验

原标题:最强手机音乐播放器?Foobar2K安卓版体验说到最强大的PC音乐播放器,相信很多朋友,特别是HiFi发烧友,会把选票投给Foobar2000。的确,在PC平台上,Foobar2000的优势非常巨大。例如它能够自由定制界面,虽然原生界面很简陋,但换皮肤后,华丽得你压根就不会看得出这是同一个软件。又例如它的功能非常强大,DSP处理、库管理等应有尽有,还能够通过第三方插件提供歌词等功能!遗憾的...

weixin_35125159的博客 6003

在 TASKPROCESSING 上为 ABAP OData 服务添加多个系统别名:从原理到落地的完整实践

本文面向SAP Gateway与ABAP开发者,详细讲解如何在TASKPROCESSING OData服务上添加系统别名。首先介绍了系统别名的概念与设计初衷,阐述了添加别名的业务场景需求,包括多系统接入、用户分流和灰度发布等。随后提供了标准配置步骤,从SPRO路径到具体操作说明,并分享了三个实际案例说明如何实现跨区域统一待办、按用户角色分流和灰度发布。最后给出了验证方法和常见问题解决方案,帮助开发者掌握这项基础但关键的配置技能,实现服务路由的可控管理。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 137

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

安卓高级编程总结:bitmap内存优化

前言:”安得广厦千万间,大庇天下寒士俱欢颜“——杜甫。在帝都住的朋友们都可能会遇到租房子困难的问题(土豪请无视),找房子真是力气活,还耗费时间,占用我宝贵的写博客时间,没办法,谁让咱没钱还想住的好点,努力努力挣钱!!!以上发点牢骚,现在进入正题。上一篇博客《Bitmap那些事之内存占用计算和加载注意事项》,写了Bitmap基础知识和使用Bitmap需要知道的注意事项,这一片博客我会写在Androi

东辉在线的专栏 1068

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: android高级控件之Volley
下一篇: android高级框架xUtils之ViewUtils
program008
博客等级 码龄11年 5粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值