2012-07-11 51 views
0

我正在創建一個android應用程序,並希望從sdcard讀取一個文件並將其發送到其他web服務。一切工作正常,但是當我從SD卡讀取文件時,它的文件大小比原始文件大得多。一個10 KB的文件變得260 KB。Android從sdcard中讀取圖像。錯誤的尺寸

我做了以下... SD卡上

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

文件大小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倍。

有誰知道我在做什麼錯?

回答

0

如果您的原始文件是JPEG壓縮率高的JPEG文件,解碼後的位圖會更大,特別是在compress()方法中質量爲100時(意味着高質量)。

您是否嘗試過使用質量較差的compress()(比較documentation)?

+0

嗨,但不bmp.compress方法只是從磁盤讀取已壓縮的圖像?我不想壓縮它兩倍。我想保持原樣。 – Chris 2012-07-11 15:17:03

+0

爲什麼你需要解碼圖像? – fiddler 2012-07-11 15:19:41

+0

不確定。也許不會。我只需要從SD卡讀取圖像,並需要獲得一個byte []數組。有沒有更好的辦法呢? – Chris 2012-07-11 15:26:04

0

這沒有錯。或者至少可以。內存中位圖的字節表示需要(32位圖像)height * widht * 4字節。當然,它與壓縮的文件大小不同。

+0

是的,但如果我再次寫入相同的文件光盤然後新創建的文件的大小仍然是以前的20倍。 – Chris 2012-07-11 15:23:58

+0

如果應用與壓縮算法/質量相同的壓縮,是的,它有 – Blackbelt 2012-07-11 15:25:29

+0

我嘗試使用與之前創建圖像時相同的壓縮級別。文件大小現在是一樣的,但新創建的圖像的質量似乎更糟糕。 – Chris 2012-07-11 15:32:54