我正在使用以下代码获取在 WebView 中加载的 html 网页的位图图像,但是由于内存不足而导致崩溃。如果将图片直接转换为位图,我如何避免内存问题。
有没有办法将文件直接加载为 jpg 等压缩格式?还是有其他方法来处理这个问题?
使用 Bitmapfactory 缩小图像看起来不太可能,因为 Bitmap 已经创建,所以对它做任何事情都为时已晚。
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;
}
编辑:
两种可能的解决方案
1
我刚想到的一个想法是以某种方式在 SD 卡等外部存储器上创建图像,如果它很大,则使用 BitmapFactory 减小大小,然后再放入内部存储器,如何实际做到这一点是另一个问题。位图必须最初是在外部存储器上创建的。
2
还是仅将其加载到imageView中引起的内存问题。在这种情况下,我可以在将图像加载到 imageView 之前使用 BitmapFactory 选项删除图像。