【问题标题】:Android - FATAL EXCEPTION: OutOfMemoryError: bitmap size exceeds VM budget?Android - 致命异常:OutOfMemoryError:位图大小超出 VM 预算?
【发布时间】:2012-04-26 07:25:16
【问题描述】:

我编写的这段代码应该从资产或 SD 卡中加载位图。通常位图不会太大, OutOfMemoryError: bitmap size exceeded VM budget 错误,但是当我再次尝试重新加载它时,大多数时候它加载正常。

你有什么想法吗?

谢谢! :)

                try
    {

    GirlBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.girl);
    GirlBitmapBG = BitmapFactory.decodeResource(getResources(), R.drawable.bg);


                if ( ForeNameSource.equals("ass") )
                {
                    try {
                        InputStream ims = getAssets().open( "girls" +"/"+ ForeName );
                        GirlBitmap = BitmapFactory.decodeStream(ims);
                    } catch (IOException e) { e.printStackTrace(); }
                }
                else
                {
                    GirlBitmap = BitmapFactory.decodeFile(ForeName);
                }


                if ( BgNameSource.equals("ass") )
                {
                    try {
                        InputStream imsBg = getAssets().open( "girls" +"/"+ BgName );
                        GirlBitmapBG = BitmapFactory.decodeStream(imsBg);
                    } catch (IOException e) { e.printStackTrace(); }
                }
                else
                {
                    GirlBitmapBG = BitmapFactory.decodeFile(BgName);
                }
    }
    catch(OutOfMemoryError e){
      Log.e("out of memory","too big!");  /// sometimes crashes here.
      Toast.makeText(this, "Bitmap too big!", 1500).show();
    }


    if ( ReSize )
    {
    WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();


    float ReSizeCoofGirl =  (float)display.getHeight() / (float)GirlBitmap.getHeight();
    if ( ReSizeCoofGirl > 1 ) { ReSizeCoofGirl = 1; }

    float ReSizeCoofBG =  (float)display.getHeight() / (float)GirlBitmapBG.getHeight();
    if ( ReSizeCoofBG > 1 ) { ReSizeCoofBG = 1; }

    // also sometimes crash comes from the line below.
    GirlBitmap = Bitmap.createScaledBitmap(GirlBitmap, (int) (GirlBitmap.getWidth()*ReSizeCoofGirl), (int) (GirlBitmap.getHeight()*ReSizeCoofGirl), false);
    GirlBitmapBG = Bitmap.createScaledBitmap(GirlBitmapBG, (int) (GirlBitmapBG.getWidth()*ReSizeCoofBG), (int) (GirlBitmapBG.getHeight()*ReSizeCoofBG), false);
    }

    drawView.invalidate();
}

【问题讨论】:

标签: java android


【解决方案1】:

查看开发者网站上添加的这个新资源: http://developer.android.com/training/displaying-bitmaps/index.html (查看屏幕右侧的示例项目)

【讨论】:

    猜你喜欢
    • 2010-12-07
    • 1970-01-01
    • 2011-02-25
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多