當我嘗試和運行的模擬器小於WVGA800它工作正常解碼位圖(包括手機),但在更大屏幕上,它拋出一個OutOfMemoryError異常機器人的OutOfMemoryError而不是任何小屏幕格式
爲什麼會是這樣?屏幕較大的手機是否擁有更多內存?
private Bitmap getBitmap(int assetKey) { return BitmapFactory.decodeResource(mContext.getResources(), assetKey); }
當我嘗試和運行的模擬器小於WVGA800它工作正常解碼位圖(包括手機),但在更大屏幕上,它拋出一個OutOfMemoryError異常機器人的OutOfMemoryError而不是任何小屏幕格式
爲什麼會是這樣?屏幕較大的手機是否擁有更多內存?
private Bitmap getBitmap(int assetKey) { return BitmapFactory.decodeResource(mContext.getResources(), assetKey); }
將數據分解爲樣本通常是一種好的做法,以避免內存異常。你可以看到下面的鏈接。你必須使用大於1的sampleSize。我通過關注這篇文章解決了我的問題。
Strange out of memory issue while loading an image to a Bitmap object
手機與大屏幕顯示並不總是有比手機將小displas更多的內存。解碼位圖佔用大量內存,每個像素有4個字節的內存。
一般來說,如果位圖太大,則下采樣位圖是個好主意。你可以很容易地做到這一點:
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = n; // <-- this only decode every nth pixel
Bitmap b = BitmapFactory.decodeResource(mContext, rId, ops);
當你說「解碼」你的意思是它只「抓住」其他像素?我正在使用spritesheets,而不是牆紙大小的圖像 - 所以像素數量 – GideonKain