我使用BitmapFactory.decodeFile
解碼來自SD卡的位圖。有時位圖比應用程序需要的或堆允許的大,因此我使用BitmapFactory.Options.inSampleSize
來請求二次抽樣(較小)的位圖。使用合適的尺寸解碼Android中的位圖
問題是,該平臺沒有強制執行inSampleSize的確切值,並且有時我最終得到的位圖太小或者對於可用內存來說仍然太大。
從http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize:
注:解碼器將努力實現這一 要求,但由此產生的位圖 可能有 正是已要求不同的尺寸。 另外,2的冪次常常是 更快/更容易讓解碼器以 的榮譽。
我應該如何解碼SD卡上的位圖以獲得我需要的確切大小的位圖,同時儘可能少地使用內存來解碼它?
編輯:
電流源代碼:
BitmapFactory.Options bounds = new BitmapFactory.Options();
this.bounds.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath, bounds);
if (bounds.outWidth == -1) { // TODO: Error }
int width = bounds.outWidth;
int height = bounds.outHeight;
boolean withinBounds = width <= maxWidth && height <= maxHeight;
if (!withinBounds) {
int newWidth = calculateNewWidth(int width, int height);
float sampleSizeF = (float) width/(float) newWidth;
int sampleSize = Math.round(sampleSizeF);
BitmapFactory.Options resample = new BitmapFactory.Options();
resample.inSampleSize = sampleSize;
bitmap = BitmapFactory.decodeFile(filePath, resample);
}
你只使用2的冪數?我完全可以理解爲什麼像這樣會喜歡這樣的事情,但我不確定自己曾經見過這樣的API參考 - 「我們會盡力給你你所要求的,但它可能完全是其他的東西」。 – MusiGenesis 2010-04-14 23:35:07
您也可能想要設置位圖的outWidth和outHeight屬性,以便控制大小。 – MusiGenesis 2010-04-14 23:37:58
我沒有使用2的權力。兩個權力太有限制,所產生的位圖太小或太大。也許我應該使用另一個API? – hpique 2010-04-14 23:40:54