使用包含图像的自定义html打开Webview

时间:2014-02-13 19:30:39

标签: android image webview

所以我有这个简单的应用程序,我想要做的是,当我点击按钮时,我想打开WebView并显示带有我的图像的自定义HTML网站(现在它将是res / drawable文件夹上的一个图标)

这就是我的WebView的样子:

public class WebViewActivity extends Activity {

private WebView webView;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webview);

    webView = (WebView) findViewById(R.id.webView1);
    webView.getSettings().setJavaScriptEnabled(true);
    //webView.loadUrl("http://www.google.com");

    //image to byte[]
    Bitmap bmBef = null;
    Bitmap bmAft = null;
      BitmapFactory.Options bmo = new BitmapFactory.Options();
        bmo.inPreferredConfig = Config.ARGB_8888;

        String patth = "android.resource://com.mkyong.android/drawable/ic_launcher.png";
        bmBef = BitmapFactory.decodeFile(patth, bmo);
        //byte[] b = bitmapToByteArray(bmBef);





    byte[] imageRaw = bitmapToByteArray(bmBef);
      String image64 = Base64.encodeToString(imageRaw, Base64.DEFAULT);
    String customHtml = "<html><body><h1>Hello, WebView</h1><img src=\"data:image/jpeg;base64," + image64 + "\" /></img></body></html>";
    webView.loadData(customHtml, "text/html", "UTF-8");

}

public static byte[] bitmapToByteArray(Bitmap bm) {
    // Create the buffer with the correct size
    int iBytes = bm.getWidth() * bm.getHeight() * 4;
    ByteBuffer buffer = ByteBuffer.allocate(iBytes);

    // Log.e("DBG", buffer.remaining()+""); -- Returns a correct number based on dimensions
    // Copy to buffer and then into byte array
    bm.copyPixelsToBuffer(buffer);
    // Log.e("DBG", buffer.remaining()+""); -- Returns 0
    return buffer.array();
}

}

但它崩溃了         int iBytes = bm.getWidth() * bm.getHeight() * 4; 我错过了什么?是错误的路径,然后在那条路上没有图像,所以我得到一个nullpointer? 我该如何修复路径? 在未来,我想用相机拍照并使用它,而不是我现在使用的图标。

1 个答案:

答案 0 :(得分:0)

当你说它崩溃时,错误是什么?查看LogCat输出中的问题来源。在此期间,此代码在WebView中为我加载图像:

File rootDirectory = mContext.getFilesDir();
String baseUrl = "file://" + rootDirectory.getAbsolutePath() + File.separator + filePath + File.separator;          

String imageName = <somthing_that_provides_your_fiename>;
Bitmap image = BitmapFactory.decodeFile(rootDirectory.getAbsolutePath() + File.separator + filePath + imageName);
WindowManager windowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
Display display = windowManager.getDefaultDisplay();
int width = display.getWidth();

int scale = width * 100 / image.getWidth();

browser.setInitialScale(scale);
browser.loadUrl(baseUrl + imageName);

我正在根据宽度缩放图像,但您可能需要检查宽度和高度。