Android 从 sdcard 读取图像。尺寸错误
Posted
技术标签:
【中文标题】Android 从 sdcard 读取图像。尺寸错误【英文标题】:Android read image from sdcard. Wrong size 【发布时间】:2012-07-11 15:01:20 【问题描述】:我正在创建一个 android 应用程序并想从 sdcard 读取文件并将其发送到 rest webservice。一切正常,但是当我从 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 倍。
有谁知道我做错了什么?
【问题讨论】:
【参考方案1】:如果你的原始文件是高压缩率的jpeg,解码后的位图大很多是正常的,特别是如果你在compress()
方法中使用100的质量(这意味着高质量)。
您是否尝试过使用质量值较低的compress()
(参见documentation)?
【讨论】:
嗨,但 bmp.compress 方法不是只是从磁盘读取已经压缩的图像吗?我不想将它压缩两次。我想保持原样。 不确定。也许不吧。我只需要从 sdcard 读取图像并需要获取一个 byte[] 数组。有没有更好的方法呢? 这可能会有所帮助:***.com/questions/6058003/…【参考方案2】:没有错。或者至少它可能是。内存中位图的字节表示需要(32 位图像)height * widht * 4
字节。当然,由于压缩,它与文件大小不同。
【讨论】:
是的,但是如果我再次将相同的文件写入光盘,那么新创建的文件的大小仍然是以前的 20 倍。 如果使用相同的压缩算法/质量对应用压缩,是的,它有 我在创建图像时尝试使用与以前相同的压缩级别。文件大小现在相同,但新创建的图像的质量似乎更差。 你是从压缩后的图片开始再压缩吗? 这就是为什么你得到一个质量较差的图像以上是关于Android 从 sdcard 读取图像。尺寸错误的主要内容,如果未能解决你的问题,请参考以下文章
从 Android 设备 sdcard 中的 txt 文件中读取数据
Android Studio 音乐播放器无法从 sdcard 读取,只能读取内存