0

画像の URL を渡して入力ストリームを取得しようとしていますが、さらに多くの画像を要求すると、メモリ不足と表示され、サーバーが再起動することがあります。

public InputStream getBitmap(String imagePath, int THUMBSIZE ){
        Bitmap ThumbImage = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(imagePath), THUMBSIZE, THUMBSIZE);
        ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
        ThumbImage.compress(CompressFormat.PNG, 0 , bos); 
        ThumbImage.recycle();
        byte[] bitmapdata = bos.toByteArray();
        InputStream bs = new ByteArrayInputStream(bitmapdata);  
        return bs;
    }

これは私が上記の方法を使用する場所ですが、なぜメモリ不足エラーが発生するのですか?

String query_file = parameters.get("fname");
String Mime = get_mime(query_file);
String original_path = root.getAbsolutePath()+query_file;                   
InputStream br = this.getBitmap(original_path, 96);
4

2 に答える 2

1

このドキュメントをよく見てください:ドキュメント

このレッスンでは、小さなサブサンプリング バージョンをメモリにロードすることで、アプリケーションごとのメモリ制限を超えずに大きなビットマップをデコードする方法について説明します。

イメージを必要なサイズにスケーリングし、メモリを割り当てます。

于 2013-11-11T11:07:38.260 に答える
0

というエラーへようこそ

java.lang.OutOfMemoryError: bitmap size exceeds VM budget

これは、高解像度の重い画像または URL から画像を読み込むときに発生します。

Android トレーニング クラスの「Displaying Bitmaps Efficiently」または try「Universal Image Loader」は、例外を理解して処理するための優れた情報を提供します。

于 2013-11-11T11:09:38.793 に答える