次のコードを使用して、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 オプションを使用してイメージをドロップできます。