从安装时资产包加载 jpeg 并将其显示在 WebView 上的最佳方式

Best way to load a jpeg from an install-time asset pack and show it on a WebView

从安装时资产包加载 jpeg 并将其显示在 WebView 上的最佳方式是什么?

如果 jpeg 是常规资产,我可以让它工作,但是,我无法让它与安装时资产一起最佳工作:

        WebView webView = this.findViewById(R.id.webView);
        String sHtmlTemplate = "<img src='file:///android_asset/files/"+file+".jpg' width='100%'/>";
        webView.loadDataWithBaseURL("file:///android_asset/files/", sHtmlTemplate, "text/html", "utf-8", null);

更新: 下面的解决方案有效,但速度很慢。有没有办法直接从 InputStream 或安装时资产加载图像?

            AssetManager assetManager = getAssets();
            InputStream is = assetManager.open(songNo + ".jpg");

            ByteArrayOutputStream baos = new ByteArrayOutputStream();

            byte[] buffer = new byte[1024000];
            int count;
            while(-1 != (count = is.read(buffer, 0, buffer.length))) {
                baos.write(buffer, 0, count);
            }
            baos.flush();
            byte[] imageRaw = baos.toByteArray();
            baos.close();
            is.close();

            String image64 = Base64.encodeToString(imageRaw, Base64.DEFAULT);
            String html = String.format("<img width='100%%25' src='data:image/jpeg;base64,%s' />", image64);
            webView.loadData(html, "text/html; charset=UTF-8", null);

谢谢

在这种情况下,WebView 可能不是显示 jpg 的最佳方式。我最终使用了另一个控件:

        com.ortiz.touchview.TouchImageView touchView = this.findViewById(R.id.touchImageView);
        try {
            AssetManager assetManager = getAssets();
            InputStream is = assetManager.open(songNo + ".jpg");
            Drawable d = Drawable.createFromStream(is,"src");
            touchView.setImageDrawable(d);

        }catch(Exception e){
            Log.i("xxx", e.getMessage());
        }