0

アプリで深刻なパフォーマンスの問題が発生しました。ビットマップをロードすると、大量のメモリが消費されるようです。

すべての Android デバイスのビットマップ サイズを含むドローアブル フォルダーがあります。これらのビットマップは高品質です。基本的に、各ビットマップを調べて、サイズに応じてデバイス用に新しいビットマップを作成します。(正しい向きとあらゆるデバイスをサポートしているため、このようにすることにしました)。動作しますが、多くのメモリを消費し、ロードに時間がかかります。誰でも次のコードについて提案できますか。

public Bitmap getBitmapSized(String name, int percentage, int screen_dimention, int frames, int rows, Object params)
{
    if(name != "null")
    {
        _tempInt = _context.getResources().getIdentifier(name, "drawable", _context.getPackageName());
        _tempBitmap = (BitmapFactory.decodeResource(_context.getResources(), _tempInt, _BM_options_temp));
    }
    else
    {
        _tempBitmap = (Bitmap) params;
    }

    _bmWidth = _tempBitmap.getWidth() / frames;
    _bmHeight = _tempBitmap.getHeight() / rows;

    _newWidth = (screen_dimention / 100.0f) * percentage;
    _newHeight = (_newWidth / _bmWidth) * _bmHeight;

    //Round up to closet factor of total frames (Stops juddering within animation)
    _newWidth = _newWidth * frames;

    //Output the created item
    /*
    Log.w(name, "Item");
    Log.w(Integer.toString((int)_newWidth), "new width");
    Log.w(Integer.toString((int)_newHeight), "new height");
    */

    //Create new item and recycle bitmap
    Bitmap newBitmap = Bitmap.createScaledBitmap(_tempBitmap, (int)_newWidth, (int)_newHeight, false);


    _tempBitmap.recycle();

    return newBitmap;
}
4

2 に答える 2

1

Android Training サイトに優れたガイドがあります。

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

これは、ビットマップ イメージの効率的な読み込みに関するものです - 強くお勧めします!

于 2012-08-13T22:16:28.937 に答える
0

これにより、スペースが節約されます。アルファ カラーを使用しない場合は、A チャネルで使用しない方がよいでしょう。

        Options options = new BitmapFactory.Options();
        options.inScaled = false;
        options.inPreferredConfig = Bitmap.Config.ARGB_8888;
    // or   Bitmap.Config.RGB_565 ;
    // or   Bitmap.Config.ARGB_4444 ;

        Bitmap newBitmap = Bitmap.createScaledBitmap(_tempBitmap, (int)_newWidth, (int)_newHeight, options);
于 2012-08-13T22:11:24.010 に答える