我在其他地方看到过以下代码用于计算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)包含计数器的方法,可以在下载完成时返回 - 或者确实如果下载完全中断的话。
答案 0 :(得分:2)
这是一种可怕的做法。你在内存中压缩文件,将整个内存写入一个字节数组,然后得到它的大小 - 总内存使用量是位图应该占用的2-3倍,副作用非常慢。
您是否希望将位图的大小加载到内存中或保存到磁盘?如果您想将它保存在磁盘上,请将其保存到磁盘,然后使用File api。因为如果你还没有把它写到磁盘上,你为什么要关心它在磁盘上的大小呢?如果你想在内存中使用bitmap.getByteCount()
- 它总是高于代码返回的值,就像它的未压缩位图的大小一样。