为什么位图显示黑色背景在android



我编写了一些代码,可以将表格布局转换为位图。每个人都认为工作完美,但是,我的位图有黑色背景这是我的源代码

public Bitmap sendMyData(TableLayout view) {
    Bitmap bitmap = null;
    ByteArrayOutputStream bbb = new ByteArrayOutputStream();
    view.setDrawingCacheEnabled(true);
    view.layout(0, 0, view.getWidth(), view.getHeight());
    view.buildDrawingCache(true);
    bitmap = Bitmap.createBitmap(view.getDrawingCache());
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bbb);
    view.setDrawingCacheEnabled(false);
    return bitmap;
}

我的代码有什么问题?为什么我的位图是黑色背景?如果有人知道解决方案,请帮助我由于

JPEG格式必须有背景色。因此,当您将PNG图像或图标转换为JPEG时,请将透明背景替换为黑色。

转换为PNG。bitmap.compress (Bitmap.CompressFormat.PNG, 100,bbb);

Try

Bitmap.createBitmap(Bitmap.CompressFormat.PNG, 100, bbb, Bitmap.Config.ARGB_8888);

你可能已经找到了这个问题的答案,但只是为了那些仍在寻找答案的人的利益,这里是。

JPEG显然提供了比PNG更好的压缩和更小的图像大小。小尺寸在优化网络、存储和图像加载事务时是理想的。然而,当你将视图保存为JPEG时,透明背景默认为"黑色"。因此,如果你想让它是任何其他颜色(包括白色),你必须在你的布局的XML中使用以下代码将视图的背景设置为该颜色

android:background="@color/whiteColor"

你需要在colors。xml中定义你的颜色如下

    <color name="whiteColor">#FFFFFF</color>

这将帮助您实现所需的压缩以及所需的视觉效果。祝一切顺利!

我希望Android会默认使用白色背景。尽管如此,以下是我们用来将透明png保存为白色背景jpg的方法。

public static byte[] ConvertBitmapToJPGBytes(Bitmap img)
{
    img = ConvertTransparentBackgroundToWhite(img);
    if (img == null)
        return null;
    ByteArrayOutputStream stream = new ByteArrayOutputStream( );
    img.compress(Bitmap.CompressFormat.JPEG, 100, stream);
    img.recycle( );
    return stream.toByteArray( );
}
private static Bitmap ConvertTransparentBackgroundToWhite(Bitmap bm)
{
    if (bm == null)
        return null;
    if (bm.hasAlpha( ))
    {
        try
        {
            Bitmap newBitmap = Bitmap.createBitmap(bm.getWidth( ), bm.getHeight( ), bm.getConfig( ));
            Canvas canvas = new Canvas(newBitmap);
            canvas.drawColor(Color.WHITE);
            canvas.drawBitmap(bm, 0, 0, null);
            bm = newBitmap;
        }
        catch (RuntimeException exc)
        {
            return null;
        }
    }
    return bm;
}

JPEG格式不支持alpha透明度,这就是为什么当您将原始图像转换为JPEG时透明背景变为黑色的原因。

用PNG格式代替

我发现它在这里:为什么位图Base64字符串显示黑色背景在android的webview ?

你应该设置draw color为白色,字体颜色为黑色

canvas.drawColor(Color.WHITE);

最新更新