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