为什么Android中的位图显示黑色背景

9

我写了一些代码,可以将TableLayout转换为位图。一切工作正常,但是我的位图有黑色背景。 这是我的源代码:

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;

}

我的代码有什么问题?为什么我的位图有黑色背景?如果有人知道解决方法,请帮忙一下,谢谢。

以下链接可能会对您有所帮助https://dev59.com/mm035IYBdhLWcg3wPdgS - Amit Padekar
尝试使用Bitmap.CompressFormat.PNG。 - AMD
@AMD,.PNG 文件不能使用,仍然是黑色背景。 - Zia Ur Rahman
6个回答

11

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

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


3
您可能已经找到了这个问题的答案,但为了那些仍在寻找答案的人的利益,这里是答案。
JPEG显然比PNG具有更好的压缩和较小的图像尺寸。小的尺寸有助于优化网络、存储和图像加载事务。然而,当您将视图保存为JPEG时,透明背景默认为“黑色”颜色。因此,如果您想要它成为任何其他颜色(包括白色),您必须使用以下代码在布局的XML中将视图的背景设置为该颜色。
android:background="@color/whiteColor"

您需要在colors.xml中定义您的颜色,如下所示:

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

这将帮助您实现所需的压缩和理想的视觉效果。祝一切顺利...


3

尝试

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

@Beka 我们没有足够的代码来确定,但是你必须在加载/转换/缩放位图的方法之一中添加Bitmap.Config.ARGB_8888。它明确告诉位图是透明的。 - agilob
这个 bbb 参数是什么意思? - user889030
@user889030,请在问题中签到。 - agilob

1

我希望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;
}

0

你应该将绘制颜色设置为白色,字体颜色设置为黑色

canvas.drawColor(Color.WHITE);

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接