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

为什么Bitmap.compress()在写入内存时返回false?

Bitmap.compress()方法是Android中用于将Bitmap对象压缩并写入到输出流中的方法。该方法返回一个boolean值,表示压缩和写入是否成功。当Bitmap.compress()在写入内存时返回false的原因可能有以下几种:

  1. 内存不足:如果设备的内存不足以容纳压缩后的Bitmap数据,Bitmap.compress()方法会返回false。这通常发生在尝试压缩大尺寸的图片或者设备内存已经被其他应用程序占用的情况下。
  2. 压缩格式不支持:Bitmap.compress()方法支持多种压缩格式,如JPEG、PNG等。如果尝试使用不支持的压缩格式,方法会返回false。
  3. 输出流写入错误:如果输出流无法正常写入数据,Bitmap.compress()方法会返回false。这可能是由于输出流被关闭、权限不足或者其他写入错误引起的。
  4. Bitmap对象为空:如果传入的Bitmap对象为null,Bitmap.compress()方法会返回false。

为了解决Bitmap.compress()方法返回false的问题,可以尝试以下几种方法:

  1. 检查设备内存:确保设备有足够的内存来容纳压缩后的Bitmap数据。可以尝试释放一些内存或者使用更小尺寸的图片进行压缩。
  2. 检查压缩格式:确保使用的压缩格式是Bitmap.compress()方法支持的格式,如JPEG或PNG。
  3. 检查输出流:确保输出流可用并且没有被关闭。可以检查输出流的状态并处理可能的写入错误。
  4. 检查Bitmap对象:确保传入的Bitmap对象不为null。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android小知识之图片的3种压缩方式小结

参数stream: 写入压缩数据的输出流。...图片的大小是没有变的,因为质量压缩不会减少图片的像素,它是保持像素的前提下改变图片的位深及透明度等,来达到压缩图片的目的,这也是为什么该方法叫质量压缩方法。...quality值越小压缩后的baos越小(使用场景:微信分享,需要对图片的字节数组大小进行限制,这时可以使用bitmap的compress方法对图片进行质量压缩)。...(null)的Bitmap对象,这样可以避免Bitmap的内存分配,但是它可以返回Bitmap的宽度、高度以及MimeType。...,通过BitmapFactory的decodeXXXX方法解码图片,返回空(null)的Bitmap对象,同时获取了bitmap的宽高,再通过calculateInSampleSize方法根据原bitmap

1.7K10
  • Bitmap优化详解

    为什么Bitmap会导致OOM?...1.每个机型在编译ROM都设置了一个应用堆内存VM值上限dalvik.vm.heapgrowthlimit,用来限定每个应用可用的最大内存,超出这个最大值将会报OOM。...当inSampleSize为1,采样后的图片大小为图片的原始大小;当inSampleSize大于1,比如2,那么采样后的图片宽高均为原图大小的1/2,像素数为原图的1/4,其占有的内存大小也为原图的...这个參数主要是提供给我们进行复用内存中的Bitmap. 满足以上条件的时候。系统对图片进行decoder的时候会检查内存中是否有可复用的Bitmap。...避免我们频繁的去SD卡上载入图片而造成系统性能的下降,毕竟从直接从内存中复用要比SD卡上进行IO操作的效率要提高几十倍.

    1.9K20

    Android之高效加载大图的方法示例

    stackoverflow上有许多相关问题的回答,当你碰到oom,可以直接跳过本文,粘贴复制答案即可。但是对于其他人来说,我想告诉你们一些加载大图的知识和原理。...让我们来看看解码后的图片占用的内存大小。 bitmap.getByteCount()可以返回图片的大小。其内存大小为 12262248 字节,等于 12.3MB .没错,你可能会有些疑惑。...原因如下: 图片以JPG,PNG或者其他格式压缩后存储计算机上。一旦你将图片加载到内存后,图片将不会呗压缩,而是占用所有像素所需的内存。...现在,bitmap.getByteCount() 返回的大小为3.1MB。这个是内存大小。 图片的内存大小由12.3MB变为3.1MB,内存大小减少啦75%。...让我们来看下不改边图片质量的尺寸大小,100表示质量不变 ByteArrayOutputStream bos = new ByteArrayOutputStream(); bitmap.compress

    62731

    Android性能优化系列之Bitmap图片优化

    为什么Bitmap会导致OOM?...1.每个机型在编译ROM都设置了一个应用堆内存VM值上限dalvik.vm.heapgrowthlimit,用来限定每个应用可用的最大内存,超出这个最大值将会报OOM。...3.使用ListView, GridView等这些大量加载view的组件,如果没有合理的处理缓存,大量加载Bitmap的时候,也将容易引发OOM Bitmap基础知识 一张图片Bitmap所占用的内存...Options的情况下: 1.decodeFile、decodeStream解析不会对Bitmap进行一系列的屏幕适配,解析出来的将是原始大小的图 2.decodeResource解析时会对...谷歌的Skia项目工程师们最终没有设置这个参数,optimize_codingSkia中默认的等于了FALSE,但是问题就随之出现了,如果我们想在FALSE和TRUE压缩成相同大小的JPEG 图片,

    74120

    Android中高效的加载大图

    但是我要告诉你一个问题,让我们看看这张解码过的图片在内存中实际占据的空间大小。 bitmap.getByteCount()方法将返回bitmap的大小。...这张图片在内存中的大小为12262248字节,相当于12.3 MB。是的,你可能会感到困惑。因为这张图片在磁盘上的实际大小约为3.5 MB,而getByteCount()方法返回的值远大于它。...原因如下: 存储磁盘上的图片是被压缩过的(以JPG,PNG或类似的格式存储)。 一旦将图片加载到内存中,它就不再被压缩,并占用尽可能多的图片的所有像素所需的内存空间。...现在,bitmap.getByteCount()方法返回的图片大小是3.1 MB。这是它在内存中的大小。正如我之前说过的,图片存储磁盘上时会被压缩。...当我们将它们加载到内存它们会占据更大的内存空间。通过上面这种方法,我们将它在内存中占据的空间大小从12.3 MB减少到了3.1 MB,减少了75%。

    82620

    Android 中图片压缩分析(上)

    同时,由于尺寸不变,所以将这个图片解码成相同色彩模式的 bitmap 之后,占用的内存大小和压缩前是一样的。...[1509956403645_3616_1509956449900.jpg] [ ] 通过日志也可以看到,质量压缩前后图片转成 Bitmap 之后在内存中的大小也并没有变化,这是保持像素的前提下...五、libjpeg 与 optimize_coding libjpeg 压缩图像,有一个参数叫 optimize_coding,关于这个参数,libjpeg.doc 有如下解释: TRUE causes...查阅一些博客资料介绍,使用相同的原始图片,分别设置 optimize_coding=TRUE 和 FALSE 进行压缩,发现 FALSE 的图片大小大约是 TRUE 的 5-10 倍。...九、参考 为什么Android的图片质量会比iPhone的差?

    4K31

    Android整理好的图片压缩工具类

    Android设备的内存有限,对于大图片,必须进行压缩后再进行显示,否则会出现内存溢出:OOM; 处理策略: 1.使用缩略图(Thumbnails); Android系统会给检测到的图片创建缩略图;可以操作...bitmap, int maxSize) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); int quality = 100; bitmap.compress...; while (baos.toByteArray().length / 1024 maxSize) { quality -= 10; baos.reset(); bitmap.compress...(CompressFormat.JPEG, quality, baos); System.out.println("质量压缩到原来的" + quality + "%大小为:" + baos.toByteArray...recycleBitmap(bitmap); return compressedBitmap; } /** * 通过压缩图片的尺寸来压缩图片大小,通过读入流的方式,可以有效防止网络图片数据流形成位图对象内存过大的问题

    1.9K20

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

    Bitmap,就是我们通常指内存中图片的大小。 2. 什么是质量压缩? 图片的质量压缩,会改变图片在磁盘中的大小(File文件的大小),不能改变图片在加载,在内存中的大小。...可以看到原文件和压缩后的文件都生成了,而且也从6.61M压缩为了1.52M,那为什么图片不正常显示呢?,在看一眼日志: ?...image.png 大家明白了吧,这个结果也和我们之前说的质量压缩只是改变磁盘中的文件大小,并不能改变加载内存中的图片大小 尺寸压缩 尺寸压缩的方法: Bitmap photoBitmap;...,避免内存溢出 BitmapFactory.decodeFile(imagePath, options); options.inJustDecodeBounds = false...图片正常显示,磁盘中图片的大小并没有改变,只是改变了加载内存中的图片大小。

    3.6K70

    【Android 内存优化】图片文件压缩 ( Android 原生 API 提供的图片压缩功能能 | 图片质量压缩 | 图片尺寸压缩 )

    : 与文件压缩相对应的是内存压缩 , 内存中如何使用更少的内存显示出想要显示的图片 ; 之后的博客中会详细介绍 ; 二、 图片文件压缩类型 ---- 图片文件压缩类型 : ① 质量压缩 : 压缩清晰度...of a bitmap is slow"); // 输出压缩过程中的执行细节 Trace.traceBegin(Trace.TRACE_TAG_RESOURCES, "Bitmap.compress...; 如果设置成 true , 则使用双线性滤波 , 当缩放图片质量更好 , 但是会降低性能 ; 如果设置成 false , 使用最近邻法进行尺寸缩放 , 图片质量差 , 但是速度很快 ; 推荐默认设置成...true , 双线性滤波开销很小 , 对于图像质量的改善效果显著 ; ③ 返回值 : 返回新的被缩放好的 Bitmap 位图 , 如果缩放失败 , 返回源图 ; /** * 创建一个新的...* 如果设置成 true , 则使用双线性滤波 , * 当缩放图片质量更好 , 但是会降低性能 ; * 如果设置成 false ,

    4.3K20

    Android中的Bitmap的详细介绍

    Android中计算bitmap的大小:bitmap.getByteCount()(返回byte) 扫盲:1M=1024KB=1024*1024byte 一般1920X1080尺寸的图片在内存中的大小...Bitmap的回收 安卓3.0以前Bitmap是存放在堆中的,我们只要回收堆内存即可 安卓3.0以后Bitmap是存放在内存中的,我们需要回收native层和Java层的内存 官方建议我们3.0...Bitmap的内存分配, 但是它可以返回Bitmap的宽度、高度以及MimeType。...第一个函数是用来防止边缘的锯齿, (true图像边缘相对清晰一点,锯齿痕迹不那么明显, false,写上去的字不饱满,不美观,看地不太清楚)。 第二个函数是用来对位图进行滤波处理。...最后,画图的时候,调用drawBitmap函数,只需要将整个Paint传入即可。 有时候,当你做RotateAnimation, 你会发现,讨厌的锯齿又出现了。

    2.4K10

    【Android 内存优化】Android 原生 API 图片压缩代码示例 ( PNG 格式压缩 | JPEG 格式压缩 | WEBP 格式压缩 | 动态权限申请 | Android10 存储策略 )

    文章目录 一、 图片质量压缩 二、 图片尺寸压缩 三、 Android 10 文件访问 四、 完整源码示例 上一篇博客 【Android 内存优化】图片文件压缩 ( Android 原生 API 提供的图片压缩功能能...= BitmapFactory.decodeResource(getResources(), resId); ③ 压缩图片 : 调用 Bitmap 对象的 compress 方法 , 压缩图片 ; bitmap.compress... Activity 中动态申请权限 : Activity 中调用 initPermissions(); 方法 , 即可动态申请 SD 卡访问权限 ; /** * 需要获取的权限列表...PackageManager.PERMISSION_GRANTED){ return true; } } return false...PackageManager.PERMISSION_GRANTED){ return true; } } return false

    73920

    Bitmap 详解

    BitmapFactory.Options的inPreferredConfig参数可以 指定decode到内存中,手机中所采用的编码,可选值定义Bitmap.Config中。...1/4,占用内存也为原始图片的1/4;   inSampleSize的取值应该总为2的整数倍,否则会向下取整,取一个最接近2的整数倍,比如inSampleSize=3,系统会取inSampleSize...)信息   选取合适的采样率   将BitmapFacpry.Options的inSampleSize参数设为false并重新加载图片     使用Bitmap的一些注意事项 Bitmap recycler...Android2.3代,Bitmap的引用是放在堆中的,而Bitmap的数据部分是放在栈中的,需要用户调用recycle方法手动进行内存回收,而在Android2.3之后,整个Bitmap,包括数据和引用...质量压缩是保持像素的前提下改变图片的位深及透明度等,来达到压缩图片的目的,经过它压缩的图片文件大小(kb)会有改变,但是导入成bitmap后占得内存是不变的,宽高也不会改变。

    2.1K20
    领券