为什么位图到 Base64 字符串在 android 的 webview 上显示黑色背景? [英] Why Bitmap to Base64 String showing black background on webview in android?

查看:38
本文介绍了为什么位图到 Base64 字符串在 android 的 webview 上显示黑色背景?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的代码通过使用 canvas 将图像合并为 1.我将该图像显示给 ImageView 它看起来不错.但是,当我尝试将其显示到 WebView 中时,它会在该图像的右侧显示黑色背景.我尝试更改 HTML 中的背景颜色,但它不会更改颜色.或使透明.任何人都可以帮忙吗?结果在这里 上图在 ImageView 中,下图在 WebView 中.>

I am using a code that combine to images into 1 by using canvas . I show that image to ImageView it looks fine. But when I try to show that into WebView it show background black to right that image. I try to change the background color in HTML but it not change color. or make transparent. Can anyone help? Result is here The above image is in ImageView and below is in WebView.

public class MyBimapTest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ImageView img1 = (ImageView) findViewById(R.id.ImageView01);

    img1.setVisibility(View.INVISIBLE);
    Drawable dra1 = img1.getDrawable();
    Bitmap map1 = ((BitmapDrawable) dra1).getBitmap();
    ImageView img2 = (ImageView) findViewById(R.id.ImageView02);
    img2.setVisibility(View.INVISIBLE);
    Drawable dra2 = img2.getDrawable();
    Bitmap map2 = ((BitmapDrawable) dra2).getBitmap();

    // ***
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    map1.compress(Bitmap.CompressFormat.JPEG, 100, baos);

    byte[] b = baos.toByteArray();
    String abc = Base64.encodeBytes(b);

    byte[] byt = null;
    try {
        byt = Base64.decode(abc);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    map1 = BitmapFactory.decodeByteArray(byt, 0, byt.length);

    // ***
    Bitmap map = combineImages(map1, map2);
    ByteArrayOutputStream bbb = new ByteArrayOutputStream();
    map.compress(Bitmap.CompressFormat.JPEG, 100, bbb);

    byte[] bit = bbb.toByteArray();

    String imgToString = Base64.encodeBytes(bit);

    String imgTag = "<img src='data:image/jpg;base64," + imgToString
            + "' align='left' bgcolor='ff0000'/>";

    WebView webView = (WebView) findViewById(R.id.storyView);
    webView.loadData(imgTag, "text/html", "utf-8");
    Drawable end = new BitmapDrawable(map);

    ImageView img3 = (ImageView) findViewById(R.id.ImageView03);
    img3.setImageBitmap(map);
}

public Bitmap combineImages(Bitmap c, Bitmap s) { 
    Bitmap cs = null;
    int width, height = 0;

    width = c.getWidth() + (s.getWidth() / 2);
    height = c.getHeight() + (s.getHeight() / 2);

    cs = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

    Canvas comboImage = new Canvas(cs);

    comboImage.drawBitmap(c, 0f, 0f, null);
    comboImage.drawBitmap(s, c.getWidth() - (s.getWidth() / 2), c
            .getHeight()
            - (s.getHeight() / 2), null);
    return cs;
}

}

推荐答案

JPEG 格式不支持 alpha 透明度,这就是将原始图像转换为 JPEG.

The JPEG format does not support alpha transparency, which is why the transparent background becomes black when you convert your original image to JPEG.

改用 PNG 格式:

 map1.compress(Bitmap.CompressFormat.PNG, 100, baos); 

String imgTag = "<img src='data:image/png;base64," + imgToString               
    + "' align='left' bgcolor='ff0000'/>";   

这篇关于为什么位图到 Base64 字符串在 android 的 webview 上显示黑色背景?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆