3

実行時に、画像をサーフェス ビューに配置しようとしています。Drawable フォルダの画像を使用しようとすると、メモリ不足エラーが発生しました。stackoverflow で簡単に検索したところ、アセット フォルダーから画像にアクセスすると、いくらか安心できることがわかりました。それでも、実行時にメモリ不足エラーが発生します。

私が分析したところ、スケーリングがこの種のメモリ関連の問題の解決に役立つことがわかりました。問題は、画像サイズが 1280 x 720 で、デバイス サイズも同じであることです。したがって、スケーリングの効果はないように感じます。

このコミュニティには専門家がいるため、この種の問題を解決するための提案や例をいくつか教えていただければ幸いです。

シナリオ 1:

Drawable フォルダーの Bitmap を使用します。

backgoundImage = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.backgroundhomepage), (int) dWidth, (int) dHeight, true);

    /***********************************************************************************************************************************************************
    1.  To get the image from asset library
     **************************************************************************************************************************************************************/ 

    public  Bitmap getAssetImage(Context context, String filename) throws IOException {
        AssetManager assets = context.getResources().getAssets();
        InputStream buffer = new BufferedInputStream((assets.open("drawable/" + filename + ".png")));
        Bitmap bitmap = BitmapFactory.decodeStream(buffer);
        return bitmap;
    }

シナリオ 2:

Assets フォルダーからのビットマップの使用

backgoundImage = Bitmap.createScaledBitmap(getAssetImage(context,"backgroundhomepage"), (int) dWidth, (int) dHeight, true);
4

3 に答える 3

2

迅速な解決策を得ました

<application
     android:largeHeap="true" >

マニフェスト ファイルのアプリケーション タグに挿入します。

于 2015-07-22T06:48:16.460 に答える
0

次のコードを使用して、ファイルからビットマップをロードできます。

private Bitmap decodeFile(File f,int req_Height,int req_Width){
    try {
        //decode image size
        BitmapFactory.Options o1 = new BitmapFactory.Options();
        o1.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(new FileInputStream(f),null,o1);


        //Find the correct scale value. It should be the power of 2.
        int width_tmp = o1.outWidth;
        int height_tmp = o1.outHeight;
        int scale = 1;

        if(width_tmp > req_Width || height_tmp > req_Height)
        {
             int heightRatio = Math.round((float) height_tmp / (float) req_Height);
             int widthRatio = Math.round((float) width_tmp / (float) req_Width);


             scale = heightRatio < widthRatio ? heightRatio : widthRatio;
        }

        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize = scale;
        o2.inScaled = false;
        return BitmapFactory.decodeFile(f.getAbsolutePath(),o2);
    } 
    catch(Exception e) 
    {
      e.printStackTrace();
    }
    return null;
}

メモリ不足の例外を解決する必要があります。ここのリンクには、回答の詳細な説明があります。

于 2013-05-27T03:48:37.857 に答える