0

次のコードを使用して、WebView に読み込まれた html Web ページのビットマップ イメージを取得していますが、メモリ不足のためにクラッシュします。ピクチャドローアブルをビットマップに直接変換する場合、メモリの問題を回避するにはどうすればよいですか。

ファイルを圧縮形式 lke jpg に直接ロードする方法はありますか? または、この問題を処理する他の方法はありますか?

Bitmapfactory を使用して画像を縮小することは、可能ではないように見えます。なぜなら、ビットマップは既に作成されているため、それについて何かを行うには遅すぎるからです。

    wv = (WebView)findViewById(R.id.webView1);
    wv.loadUrl("http://www.google.com");
    WebSettings webSettings = wv.getSettings();
    webSettings.setJavaScriptEnabled(true);

    Picture picture = wv.capturePicture();

   HTMLBitmap = pictureDrawable2Bitmap(picture);
        Toast.makeText(HTMLActivity.this, "bitmap " + HTMLBitmap.toString(), Toast.LENGTH_LONG).show();
         
       Bitmap bmp = Bitmap.createScaledBitmap(HTMLBitmap, 500, 300, false);

    // the imageView that is being set to the bitmap                
   imageOne.setImageBitmap(bmp);

  private static Bitmap pictureDrawable2Bitmap(Picture picture){
        PictureDrawable pictureDrawable = new PictureDrawable(picture);
        Bitmap bitmap = Bitmap.createBitmap(pictureDrawable.getIntrinsicWidth(),pictureDrawable.getIntrinsicHeight(), Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        canvas.drawPicture(pictureDrawable.getPicture());
        return bitmap;
    }

編集:

2つの可能な解決策

1

私が考えた1つのアイデアは、SDカードのような外部メモリに画像を作成し、BitmapFactoryを使用してサイズが大きい場合はサイズを落としてから、内部メモリに配置することです。実際にそれを行う方法は別の問題です. ビットマップは、最初に外部メモリに作成する必要があります。

2

または、imageViewにロードすることによってのみ引き起こされるメモリの問題です。その場合、ImageView にロードする前に、BitmapFactory オプションを使用してイメージをドロップできます。

4

1 に答える 1

0

ビットマップ bmp = Bitmap.createScaledBitmap(HTMLBitmap, 500, 300, false);

于 2013-03-22T07:57:21.917 に答える