【问题标题】:Why Bitmap showing black background in android为什么位图在android中显示黑色背景
【发布时间】:2015-10-15 00:48:29
【问题描述】:

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

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;

}

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

【问题讨论】:

标签: android android-layout android-canvas android-bitmap


【解决方案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;
}

【讨论】:

    【解决方案2】:

    您应该将 draw color 设置为白色,将字体颜色设置为 black

    canvas.drawColor(Color.WHITE);
    

    【讨论】:

      【解决方案3】:

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

      JPEG 显然比 PNG 提供了更好的压缩和更小的图像尺寸。小尺寸在优化网络、存储和图像加载事务方面是可取的。但是,当您将视图另存为 JPEG 时,透明背景默认为“黑色”。因此,如果您希望它是任何其他颜色(包括白色),则必须在布局的 XML 中使用以下代码将视图的背景设置为该颜色

      android:background="@color/whiteColor"
      

      你必须在 colors.xml 中定义你的颜色,如下所示

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

      这应该可以帮助您实现所需的压缩以及所需的视觉效果。万事如意...

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          试试

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

          【讨论】:

          • @Beka 我们没有足够的代码来确定它,但您必须将 Bitmap.Config.ARGB_8888 添加到加载/转换/缩放位图的方法之一。它明确地告诉位图是透明的。
          • 这个bbb参数是什么?
          • @user889030 签到问题
          【解决方案6】:

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

          改用 PNG 格式

          我在这里找到它:Why Bitmap to Base64 String showing black background on webview in android?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-11-15
            • 2011-07-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多