这种以kb计算位图大小的方法是否会破坏Bitmap?

时间:2017-03-30 20:10:55

标签: android bitmap

我在其他地方看到过以下代码用于计算Android Bitmap的kb大小,并且想知道这是否真的对Bitmap有破坏性?

ByteArrayOutputStream stream = new ByteArrayOutputStream();   
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);   
byte[] bytes = stream.toByteArray(); 
long sizeInKB = bytes.length; 

特别是这一行:

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);

这实际上会改变Bitmap吗?理想情况下,我在寻找一种完全非破坏性的方式来记录kb中的图像大小,然后再继续使用它。

<小时/> 注意:在这种情况下使用以下内容是不切实际的:

File file = new File(filepath);
long length = file.length();

因为那时我没有存档位图。

<小时/> 编辑:我决定通过以不同方式获取字节下载值来解决我的问题:我扩展 InputStream 并覆盖读取(字节b [],int off ,int len)包含计数器的方法,可以在下载完成时返回 - 或者确实如果下载完全中断的话。

1 个答案:

答案 0 :(得分:2)

这是一种可怕的做法。你在内存中压缩文件,将整个内存写入一个字节数组,然后得到它的大小 - 总内存使用量是位图应该占用的2-3倍,副作用非常慢。

您是否希望将位图的大小加载到内存中或保存到磁盘?如果您想将它保存在磁盘上,请将其保存到磁盘,然后使用File api。因为如果你还没有把它写到磁盘上,你为什么要关心它在磁盘上的大小呢?如果你想在内存中使用bitmap.getByteCount() - 它总是高于代码返回的值,就像它的未压缩位图的大小一样。