从webview加载本地html捕获图片

时间:2012-11-21 13:48:48

标签: java android webview image capture

我试图从webiview捕获图像,当我尝试从Web加载Url时,它会起作用,但是当我尝试在资源中加载本地html文件或在String中加载html时,它会崩溃以下错误:

java.lang.IllegalArgumentException: width and height must be > 0
    at android.graphics.Bitmap.createBitmap(Bitmap.java:638)
    at android.graphics.Bitmap.createBitmap(Bitmap.java:620)

我的代码是:

//Create the webview

WebView w = new WebView(this);

w.setWebViewClient(new WebViewClient() {
    public void onPageFinished(WebView view, String url) {
        //get the picture from webview
        Picture picture = view.capturePicture();

        Bitmap b = Bitmap.createBitmap(picture.getWidth(),
                       picture.getHeight(), Bitmap.Config.ARGB_8888);

        Canvas c = new Canvas(b);

        picture.draw(c);

        FileOutputStream fos = null;

        try {

        String path = Environment.getExternalStorageDirectory().toString();
        File dir = new File(path, "/Movel/media/img/");
        if (!dir.isDirectory()) {
            dir.mkdirs();
        }
        String arquivo = "darf_"+ System.currentTimeMillis() + ".jpg";
        File file = new File(dir, arquivo);

        fos = new FileOutputStream(file);
        String imagePath =  file.getAbsolutePath();
        //scan the image so show up in album
        MediaScannerConnection.scanFile(MainActivity.this,  new String[] { imagePath }, 
                        null, new MediaScannerConnection.OnScanCompletedListener() {
                            public void onScanCompleted(String path, Uri uri) {

                            }
                            });

        if (fos != null) {
            b.compress(Bitmap.CompressFormat.JPEG, 90, fos);

            fos.close();
        }

        } catch (Exception e) {
        e.printStackTrace();
        }
    }
    });

setContentView(w);

String html = "<html><head><meta http-equiv='Content-Type' content='text/html; charset=ISO-8859-1'> " +
    "<title>Demo Html</title> </head> <body>  <H1>Testing One Two Three</H1> </body></html>";

//load from assets
//w.loadDataWithBaseURL("file:///android_asset/", Strings.converterParaElementosHTMLEspeciais(html), "text/html", "iso-8859-1", null);
//w.loadUrl("file:///android_asset/darf.html");
//w.loadUrl("https://www.google.com.br");
w.loadData(html, "text/html", "iso-8859-1");

1 个答案:

答案 0 :(得分:2)

此错误是因为您的WebView宽度和高度为0,因此您必须先Layout WebView,然后尝试以下代码:

myWebView.setWebChromeClient(new WebChromeClient() {
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            super.onProgressChanged(view, newProgress);
            if (newProgress == 100) {
                view.post(new Runnable() {

                    @Override
                    public void run() {
                        // take the snapshot here


                    }
                });

            }
        }

    });