0
我有拿一個位圖,兩種顏色並返回一個BitmapDrawable功能:Android的內存溢出的異常處理位圖
// Theme function
static public BitmapDrawable pFilter(Bitmap bitmap, int backgroundColor, int foregroundColor)
{
Bitmap bitmapCopy = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), null, true);
int[] pixels = new int[bitmapCopy.getByteCount()];
bitmapCopy.getPixels(pixels, 0, bitmapCopy.getWidth(), 0, 0, bitmapCopy.getWidth(), bitmapCopy.getHeight());
// Call native function
bitmapCopy.setPixels(pixels, 0, bitmapCopy.getWidth(), 0, 0, bitmapCopy.getWidth(), bitmapCopy.getHeight());
BitmapDrawable finalDrawable = new BitmapDrawable(Application.getAppContext().getResources(), bitmapCopy);
return finalDrawable;
}
// Custom Imageview
public class CustomImageView extends ImageView
{
private BitmapDrawable sourceImage;
private CustomTheme theme;
// [...]
private void refreshImageView()
{
super.setImageDrawable(theme.pFilter(sourceImage.getBitmap(), theme.backgroundColor, theme.foregroundColor));
}
我的問題是,經過約80調用該函數(10px的* 10px的位圖)我在此行上發現OutOfMemory異常:
int[] pixels = new int[bitmapCopy.getByteCount()];
謝謝。
我得到一個錯誤:java.lang.IllegalArgumentExcepti on:無法繪製回收的位圖 –
原始位圖仍然顯示在imageView上嗎?嘗試在調用回收之前用其他東西替換它。 – hepizoj
是的,看看我的代碼:BitmapDrawable finalDrawable = new BitmapDrawable(Application.getAppContext()。getResources(),bitmapCopy); –