首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android训练课程(Android Training) - 高效的显示图片

这节课教你 解码大尺寸的图片而不越过每个应用的内存限制,以在内存中加载一个更小的 样本版本(缩略图)的方式。...读取位图的尺寸大小和类型 BitmapFactory类提供了多个对图片解码的方法 (decodeByteArray(), decodeFile(),decodeResource(), 等.)...加载图片所用的时长是不可预测的,和依赖多个因素(从硬盘或者网络的读取速度,图像尺寸,CPU的能力等等)。...LruCache 类(在Support Library 安卓支持可 API 4 中)很适合 缓存图像的任务,它以LinkedHashMap 中的强引用方式 保持最近被引用的对象和 在缓存数量超过指定的数量时移除最近最少使用的成员...下面的演示代码使用了一个 DiskLruCache 的磁盘缓存实现,它来自于 安卓源代码 Android source.

2.9K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    在Android中高效的加载大图

    将图片加载到内存中 这很简单。你只需要使用BitmapFactory来解码你的图片。...这张图片在内存中的大小为12262248字节,相当于12.3 MB。是的,你可能会感到困惑。因为这张图片在磁盘上的实际大小约为3.5 MB,而getByteCount()方法返回的值远大于它。...如果我们有一张尺寸为1000x1000的图片,并且在解码之前设置inSampleSize的值为2, 那么解码之后,我们将得到一张尺寸为500x500的图片。...如果我们有一张尺寸为200x400的图片,并且在解码之前设置inSampleSize的值为5, 那么解码之后,我们将得到一张尺寸为40x80的图片。...当我们将它们加载到内存中时它们会占据更大的内存空间。通过上面这种方法,我们将它在内存中占据的空间大小从12.3 MB减少到了3.1 MB,减少了75%。

    82820

    Bitmap图片压缩,大图加载防止OOM

    读取位图尺寸和类型 BitmapFactory 类提供了几种用于从各种来源创建 Bitmap 的解码方法(decodeByteArray()、decodeFile()、decodeResource()等...每种类型的解码方法都有额外的签名,允许您通过 BitmapFactory.Options 类指定解码选项。...*4) ,因为 mdip 到 xxdpi 图片的宽高分别会放大4倍; nodpi 目录中的资源被视为与密度无关,系统将不会对它们进行缩放。...前者是降低图像尺寸,改变图片的存储体积; 后者则是在不改变图片尺寸的情况下,通过损失颜色精度,达到相同目的; 压缩Bitmap磁盘占用空间的大小 //如果成功地把压缩数据写入输出流,则返回true。...(加载到堆内存时已经缩放了大小了,.9图 会忽略此标志) inDensity:加载图片的原始宽度,如果此密度与 inTargetDensity 不匹配,则在返回 Bitmap前会将它缩放至目标密度。

    2.8K00

    Bitmap图片压缩,大图加载防止OOM

    读取位图尺寸和类型 BitmapFactory 类提供了几种用于从各种来源创建 Bitmap 的解码方法(decodeByteArray()、decodeFile()、decodeResource()等...每种类型的解码方法都有额外的签名,允许您通过 BitmapFactory.Options 类指定解码选项。...*4) ,因为 mdip 到 xxdpi 图片的宽高分别会放大4倍; nodpi 目录中的资源被视为与密度无关,系统将不会对它们进行缩放。...前者是降低图像尺寸,改变图片的存储体积; 后者则是在不改变图片尺寸的情况下,通过损失颜色精度,达到相同目的; 压缩Bitmap磁盘占用空间的大小 //如果成功地把压缩数据写入输出流,则返回true。...(加载到堆内存时已经缩放了大小了,.9图 会忽略此标志) inDensity:加载图片的原始宽度,如果此密度与 inTargetDensity 不匹配,则在返回 Bitmap前会将它缩放至目标密度。

    2K20

    【Android 内存优化】Bitmap 图像尺寸缩小 ( 设置 Options 参数 | inJustDecodeBounds | inSampleSize | 工具类实现 )

    六、Bitmap 图像尺寸缩小代码示例 1、图片缩小工具类 2、Activity 调用工具类代码 3、执行结果 一、解码图片参数 inJustDecodeBounds ---- 1 ....解码图片参数 : ① 设置获取参数解码选项 : 设置解码时的 BitmapFactory.Options 对象的 inJustDecodeBounds 为 true , ② 解码图像 : 解析器返回的...图片复用机制 : ① 图片复用 : 如果设置了一个 Bitmap 对象给 inBitmap 参数 , 解码方法会获取该 Bitmap 对象 , 当加载图片内容时 , 会尝试复用该 Bitmap 对象的内存...如果设置了一个 Bitmap 对象给 inBitmap 参数 解码方法会获取该 Bitmap 对象 , 当加载图片内容时 , 会尝试复用该 Bitmap 对象的内存...如果解码方法无法复用该 Bitmap 对象 , 解码方法可能会抛出 IllegalArgumentException 异常 ; 当前的实现是很有必要的 , 被复用的图片必须是可变的

    3K20

    Android-图片的压缩(质量压缩和尺寸压缩)

    图片的质量压缩,会改变图片在磁盘中的大小(File文件的大小),不能改变图片在加载时,在内存中的大小。...图片的尺寸压缩是指:按照一定的倍数对图片减少单位尺寸的像素值,可以改变图片在内存中的大小,不改变图片在磁盘中的大小。 原理是:通过减少单位尺寸的像素值,真正意义上的降低像素值。...image.png 大家明白了吧,这个结果也和我们之前说的质量压缩只是改变磁盘中的文件大小,并不能改变加载时内存中的图片大小 尺寸压缩 尺寸压缩的方法: Bitmap photoBitmap;...图片正常显示,磁盘中图片的大小并没有改变,只是改变了加载时内存中的图片大小。...补充 质量压缩无法避免oom,但可以改变图片在磁盘中或者说是File文件的大小,尺寸压缩可以避免OOM,但不改变图片本身的大小,只改变加载是在内存中的大小,即bitmap.

    3.7K70

    Android无线传屏功能实现

    里我们使用的主要属性 inBitmap:如果该值不等于空,则在解码时重新使用这个Bitmap。...注意 我们在用BitmapFactory生成图片的时候如果不设置的option的话,每次都会生成新的Bitmap对象,频繁的生成释放会导致内存抖动,所以可以用inBitmap来防止,我这里暂时还没用,...如果使用的话,我们可以定义一个图片池,循环利用其中的对象,但是一定要保证正在展示的对象不能被同时被修改,会导致显示有横线。...bitmap.isRecycled()) { bitmap.recycle(); } } } 注意 图片播放是可以用ImageView来直接加载,但是问题是如果接收到的图片的间隔不一致的时候会感觉明显的卡顿...,所以用自定义TextureView来处理,里面缓存要保存的图片,以每秒25帧播放,但是如果图片的产生速度较快的话,会导致缓存的图片越来越多,从而oom了,所以我在缓存中至多保留最新的三个,其它的丢弃

    1.2K20

    android学习笔记----关于图形的基本处理讲解

    一定记住解码图片时的第二个参数BitmapFactory.Options,控制下采样和图像是否应该被完全解码的选项,或者只是返回大小。...,这条线不会因为图片的旋转而改变。...会根据设备的屏幕密度,将这一数值转换为不同的像素数量,那么对图片来说是如何操作的呢?...作为开发者,你应该用 dp 值来声明图片的宽度和高度,例如 48dp x 48dp。然后 Android 会确保所有这些图片在各种不同的设备上大概保持相同的尺寸,无论是每英寸的像素数量是多少。...()和getHeight()的尺寸和显示的尺寸不同,因为图片放在drawable不同的目录 // 按缩放比解析位图 Bitmap bitmap = BitmapFactory.decodeResource

    65220

    【Android 内存优化】自定义组件长图组件 ( 获取图像宽高 | 计算解码区域 | 设置图像解码属性 复用 像素格式 | 图像绘制 )

    图片尺寸数据解码 : ① 创建解码选项 : 创建 BitmapFactory.Options 对象 ; ② 设置解码尺寸数据 : 设置 BitmapFactory.Options 对象的 inJustDecodeBounds...为 true , 解码图像时 , 不解码图像数据 , 只获取图像的尺寸数据 ; ③ 解码图像尺寸数据 : 调用 BitmapFactory.decodeStream 方法 , 解码图片 , 图片相关的尺寸数据保存到了...// 读取图片的尺寸数据 mOptions.inJustDecodeBounds = true; // 解码图片 , 图片相关的尺寸数据保存到了 mOptions 选项中 BitmapFactory.decodeStream...: 之前解码图像尺寸 , 将 BitmapFactory.Options 的 inJustDecodeBounds 属性设置为了 true , 现在要开始解码图像数据了 , 需要关闭该选项 , 设置为...每次解码时 , 都要设置一下内存复用的 Bitmap 对象 ; mOptions.inBitmap = mBitmap; ③ 解码图片 : 调用区域解码器的 mBitmapRegionDecoder.decodeRegion

    2K10

    【Android 内存优化】Bitmap 图像尺寸缩小 ( 考虑像素密度、针对从不同像素密度资源中解码对应的 Bitmap 对象 | inDensity | inTargetDensity )

    文章目录 一、像素密度对解码图片的影响 二、不考虑像素密度会导致图片缩小尺寸不准确 三、DisplayMetrics 源码阅读、研究手机资源获取规则 四、像素密度参数设置取值 ( inDensity |..., 这里不再详述 ; Bitmap 解码尺寸计算公式如下 : 加载到内存中的宽或高像素值 = 实际宽或高像素值 \times \dfrac{本机像素密度}{图片存放的目录对应的像素密度} 二、不考虑像素密度会导致图片缩小尺寸不准确...= 32 , 此时是可以将图片宽高都缩小到 100 的 , 缩小后的图片宽高是 62 x 32 ; 如果从真实的图像解码 , 会将像素密度解码考虑进去 , 这里从 mdpi 资源中解码图片 , 实际的解码出来的大小是...像素密度值 , 在图像返回时 , 会自动将图像按照 inDensity 向 inTargetDensity 缩放 ; // 设置图片的来源方向的像素密度 , 如设置...如果设置了一个 Bitmap 对象给 inBitmap 参数 解码方法会获取该 Bitmap 对象 , 当加载图片内容时 , 会尝试复用该 Bitmap 对象的内存

    2.5K20

    Android控件之ImageView

    零、前言 1.ImageView地位:直接继承自View,安卓源码1600+,算是个小类,但图片显示基本上都用它 2.scaleType有点小烦,不过看图还是挺清晰的 3.cropToPadding...的上部分位置 fitXY:不保持原比例,填满ImageView center:按比例扩大或缩小到ImageView的ImageView的高度,居中显示 centerCrop:(小图会放大形成模糊版的center...,大图同center) centerInside:(小图会保持原大小,大图同fitCenter) matrix:不改变原图的大小,从ImageView的左上角开始绘制,超过ImageView的裁剪 二、..." 2.代码中设置 Drawable和Bitmap都是安卓中图片显示和处理的重要类,以后会详细论述。...2.连接传送门: 更多安卓技术欢迎访问:安卓技术栈 我的github地址:欢迎star 简书首发,腾讯云+社区同步更新 张风捷特烈个人网站,编程笔记请访问:http://www.toly1994

    1K00

    机器学习为核心,DeepMind助力谷歌开发的安卓 9「Pie」今日上线

    今日,谷歌宣布将把安卓 9 的源代码放到安卓开源项目上(AOSP),开始在所有的谷歌 Piexl 手机上用安卓 9。据介绍,安卓 9 拥有的机器学习能力能让手机变得更智能、便利、个性化。...你可以使用 ImageDecoder 或 BitmapFactory 从 jpeg 获得位图来实现从 jpeg 到 heic 的转换,并且可以使用 AndroidX 库中的 HeifWriter 从 YUV...位图和绘图的图像解码器 图像解码器(ImageDecoder)API 为你提供了一种将图像解码为位图或绘图的更简便方法。你从字节缓冲区、文件或 URI 中创建位图或绘图。...与 BitmapFactory 相比,API 提供了几个优势,包括对精确缩放的支持、对物理内存的单步解码、对解码后处理的支持以及对动画图像的解码。 连接和定位 用于室内导航的 Wi-Fi RTT ?...然后更新你的项目的 compileSdkVersion 和 targetSdkVersion 到 API 28。当你改变目标时,确保你的 app 支持所有合适的行为变化。

    2K10

    开启新视界!百款应用广色域适配评测报告

    涉及到购物比价、实用工具、社交通讯等16个类别,从测试结果来看,问题比较大的在拍摄美化、购物比价和社交通讯分类中,用户对这几类应用的图片真实度和质感要求较高,尤其购物类应用,图片色差会影响销量、评价等,...如下图所示,如应用没有适配广色域,会导致P3广色域图片解码异常,颜色比较暗淡,不能将图片本身的质感体现出来。...广色域适配建议 先来看看已知的几个未适配场景: 总是假定图片处于sRGB 色彩空间; 没有进行必要转换,便将图片上传为纹理,比如一些视频效果场景,直接拿解码的pixels上传gpu; 在压缩时忽略 ICC...,在进行图片解码时,会指定目标色彩空间,以便解码输出的Bitmap位图对象的色彩空间匹配应用界面图层的色彩空间;如果应用没有指定目标色彩空间,通常是没有对广色域进行适配。)...3.2 Fresco适配 从我们目前的测试结果来看,当应用使用Fresco三方开源框架并且进行尺寸缩放或者旋转的操作之后,P3图片显示会有失真的问题。

    1.4K30

    3-VIV-Android控件之ImageView

    零、前言 [1].ImageView地位:直接继承自View,安卓源码1600+,算是个小类,但图片显示基本上都用它 [2].scaleType有点小烦,不过看图还是挺清晰的 [3].cropToPadding...的ImageView的高度,居中显示 centerCrop:(小图会放大形成模糊版的center,大图同center) centerInside:(小图会保持原大小,大图同fitCenter) matrix...:不改变原图的大小,从ImageView的左上角开始绘制,超过ImageView的裁剪 二、剪裁:cropToPadding:需要与scrollX或scrollY同用,单独无效 测试时true和false...tint.png android:tint="#22FF4081" ---- 五、最重要的要数设置图片了 1.xml设置图片 android:src="@mipmap/iv_50x40" 2.代码中设置...Drawable和Bitmap都是安卓中图片显示和处理的重要类,以后会详细论述。

    78120

    1-MI-Android多媒体之Bitmap

    零、前言 1.Bitmap是关于图象的类,也就是位图 2.生成Bitmap对象的方式 3.BitmapFactory.Options 4.模糊处理 5.给一个Bitmap添加倒影 6....将一个View转换成Bitmap 7.保存bitmap --- 一、生成Bitmap对象的方式 1.从文件获取(运行时权限自己处理) //通过文件绝对路径加载图片 Bitmap bitmap =..._500x400); mIdIv.setImageBitmap(bitmap); 3.通过流生成bitmap(也可以从网络获取图片流) try { FileInputStream fis = new...true时图片不显示 可以获取信息 BitmapFactory.Options o = new BitmapFactory.Options();//获取对象 o.inJustDecodeBounds...2.连接传送门: 更多安卓技术欢迎访问:安卓技术栈 我的github地址:欢迎star 简书首发,腾讯云+社区同步更新 张风捷特烈个人网站,编程笔记请访问:http://www.toly1994

    61600

    高性能图片优化方案

    加载图片显示到手机通过代码,将这张图片加载进内存时,会先解析(也就是解码操作)图片文件本身的数据格式,然后还原为位图,也就是 Bitmap 对象。...它是在保持像素的前提下改变图片的位深及透明度等,来达到压缩图片的目的,不会减少图片的像素。进过它压缩的图片文件大小会变小,但是解码成bitmap后占得内存是不变的。...3.2 图片尺寸压缩3.2.1 如何理解尺寸压缩通常在大多数情况下,图片的实际大小都比需要呈现的尺寸大很多。...利用该属性,我们就可以在图片不占用内存的情况下,在图片压缩之前获取图片的尺寸。怎样才能对图片进行压缩呢?通过设置BitmapFactory.Options中inSampleSize的值就可以实现。...主要作用 : BitmapRegionDecoder 可以从图像中 解码一个矩形区域 。相当于手在滑动的过程中,计算当前显示区域的图片绘制出来。基本使用流程 : 先创建,后解码 。

    91030

    【Android 内存优化】自定义组件长图组件 ( 长图滚动区域解码 | 手势识别 GestureDetector | 滑动计算类 Scroller | 代码示例 )

    MotionEvent e) { return false; } /** * 手指滑动事件, 此时手指没有离开屏蔽 * * 随着滚动 , 改变图片的解码区域...代码示例 /** * 手指滑动事件, 此时手指没有离开屏蔽 * * 随着滚动 , 改变图片的解码区域 ; * * @param e1 滑动的起始按下事件..., 该方法可以移动 x 轴 , y 轴的解码 当向上滑动时 , 触摸坐标由大变小 , distanceY 小于 0 , 对应的图片也向上滑动 , 解码区域的...mOptions.inJustDecodeBounds = true; // 解码图片 , 图片相关的尺寸数据保存到了 mOptions 选项中 BitmapFactory.decodeStream..., 该方法可以移动 x 轴 , y 轴的解码 当向上滑动时 , 触摸坐标由大变小 , distanceY 小于 0 , 对应的图片也向上滑动 , 解码区域的

    1.6K22
    领券