2012-06-12 43 views
1

如果我們處理大圖像(位圖),我們最終會在圖像允許的大小(爲了顯示)上打牆。我想知道是否有人知道這個限制在哪裏?這裏有很多因素,手機的最大堆大小等。Android圖片文件大小限制以及如何處理大圖片?

如果要顯示它們並使它們可以交互,還有處理大圖像的任何解決方法嗎?

+0

你發現了嗎? – Lijo

+0

@Lijo據我所知,有很多支持這個功能的庫。只需搜索可縮放的圖像。此外Android現在支持svg/vector圖像。 – Warpzit

回答

1

如果您已經解碼了圖像數據,可以將它們存儲在存儲器 的文件中,然後對該緩衝區進行mmap映射。

然後你就可以通過createBitmap function

MMapped內存區域創建了這個緩衝區子圖像(磚)不計agains堆,不受垃圾收集 並通過繞過通常的文件操作尋呼子系統處理。

+0

您可以舉例說明一下使用情況,或者向我的方向發送一些信息以瞭解更多信息? – Warpzit

+0

http://docs.oracle.com/javase/6/docs/api/java/nio/MappedByteBuffer.html - 使您的文件奇蹟般地顯示爲字節緩衝區 –

+0

對不起,我沒有標記爲正確的答案但由於我沒有能夠對它進行測試,我只有你的話,這是可行的。我可能會在未來嘗試:) – Warpzit

1

如果你想顯示整個圖像全屏然後委託它來建立,在應用程序:

Intent i = new Intent(Intent.ACTION_VIEW); 
i.setDataAndType(uri, "image/jpeg"); 
startActivity(i); 

當你想顯示爲縮略圖等等然後讀this doc

2

要壓縮大圖像尺寸,你可以使用有關大位圖的工作和處理內存限制

ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, bytes); 
+0

是不是我所要求的,但無論如何感謝。 – Warpzit

0

本文會談。它還討論了導致OutOfMemoryError的一些因素,例如堆大小,其他位圖加載到內存和內存碎片。最後,它提供了一種算法,將最大可能的圖像文件動態加載到內存中並執行轉換。

http://bricolsoftconsulting.com/handling-large-images-on-android/

+0

是的,但這基本上只是降低質量。大部分時間不是解決方案:) – Warpzit