0

我正在创建一个 android 应用程序,并想从 sdcard 读取文件并将其发送到休息网络服务。一切正常,但是当我从 sdcard 读取文件时,它的文件大小比它的原始大小大得多。一个 10 KB 的文件将获得 260 KB。

我正在做以下...

File f = new File(uri);
Log.d("ORIGINAL FILESIZE:"+f.length()); 

SDCARD 上的文件大小为 10752 字节。

这与手机上的图像尺寸完全相同。

Bitmap bmp = BitmapFactory.decodeFile(uri);
ByteArrayOutputStream bao = new ByteArrayOutputStream();

bmp.compress(Bitmap.CompressFormat.JPEG, 100, bao);
Log.d("FILESIZE AFTER:"+bao.size());

解码/压缩后文件大小为 260904 字节。

这是服务器接收并写入磁盘的文件大小。它的图像和质量相同,但大约大 20 倍。

有谁知道我做错了什么?

4

2 回答 2

0

这没有错。或者至少它可能是。位图在内存中的字节表示需要(32 位图像)height * widht * 4字节。当然,由于压缩,它与文件大小不同。

于 2012-07-11T15:20:20.553 回答
0

如果你的原始文件是高压缩率的jpeg,解码后的位图大很多是正常的,特别是如果你在compress()方法中使用100的质量(这意味着高质量)。

您是否尝试使用compress()较低质量值(参见文档)?

于 2012-07-11T15:11:03.540 回答