簡體   English   中英

如何從Android中的大位圖加載切片?

[英]How to load tiles from a large bitmap in Android?

如果我有一個通常會產生“內存不足”異常的大型位圖文件,我該如何將其加載為tile? 例如,我有10,000x10,000的圖像,我想將其分成10x10網格的1,000x1,000像素圖塊。

我見過函數Bitmap.createBitmap(sourceBitmap, x, y, width, height)但它需要我的大圖像作為源輸入。

如何在不完全加載輸入圖像的情況下從輸入圖像中獲取圖塊?

來自Romain Guy的回答是否可以將位圖切成小塊而不將整個內容加載到內存中?

Android 2.3.3有一個名為android.graphics.BitmapRegionDecoder的新API,可讓您完全按照自己的意願行事。

例如,您可以執行以下操作:

 BitmapRegionDecoder decoder = BitmapRegionDecoder.newInstance(myStream, false); Bitmap region = decoder.decodeRegion(new Rect(10, 10, 50, 50), null); 

簡單 :)

如果圖像存儲為壓縮位圖,則幾乎不可能計算圖像的特定區域在文件中的位置。 要查找特定區域,您將逐行解碼,丟棄結果,直到您到達y行。 然后,您繼續解碼高度行,將像素丟棄到X坐標的左側和X +寬度的右側....如果您在大位圖的底部平移,則非常慢。

在行之間進行讀取,如果'isShareable'為真,前面提到的BitmapRegionDecoder()似乎在后台執行此操作。 否則,它似乎可以解壓縮圖像,並存儲未壓縮的副本。 每像素1個字節,占用10,000x10,000位圖需要100MB。

如果你很幸運,你可以找到一個可以從存儲中加載圖像塊而不是加載整個圖像的庫。 這取決於圖像格式,以及可用於讀取的庫。 另外,庫可能是用C語言編寫的,因此您必須將其移植到Java或使用NDK。

在將圖像放入手機之前將圖像分解成圖塊要好得多。

如果這些選項都不適合你,我認為你運氣不好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM