0

我正在使用以下代码获取在 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 选项删除图像。

4

1 回答 1

0

位图 bmp = Bitmap.createScaledBitmap(HTMLBitmap, 500, 300, false);

于 2013-03-22T07:57:21.917 回答