android - 为什么位图到 Base64 字符串在 android 的 webview 上显示黑色背景?

标签 android html android-layout android-webview

我正在使用一个代码,通过使用 canvas 将图像组合成 1 个。我将该图像显示给 ImageView,它看起来不错。但是,当我尝试将其显示到 WebView 中时,它会显示黑色背景以显示该图像。我尝试更改 HTML 中的背景颜色,但它没有改变颜色。或使透明。谁能帮忙? Result is here上图在 ImageView 中,下图在 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 时透明背景变为黑色的原因。

改用 PNG 格式:

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

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

关于android - 为什么位图到 Base64 字符串在 android 的 webview 上显示黑色背景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5133879/

相关文章:

java - 应用程序无法在 Android Studio 中编译和运行

android - GET_ACCOUNTS 权限危险吗?

javascript - 将一个 div 设置为一个数组,这样我就可以根据按钮使事物消失/重新出现

java - 未从项目单击监听器上的 gridview 获取所有图像

安卓 : Application does not seek into layout-land when the device changes his orientation

java - 如何摇动 ViewPager 以向用户显示有更多页面可用?

java - 在 Android 中每 10 分钟调用一个方法

javascript - 预加载整个 Bootstrap 轮播

javascript - 使用 JavaScript 检测网页中的文本

java - 无法将搜索栏与文本关联起来