如何在保持透明背景的同时转换图像中的 LinearLayout

How to convert a LinearLayout in an image while keeping the transparent background

我有一个 LinearLayout,我想在图像中进行转换,但我看到它变成了位图,背景失去了透明度。然后我必须把它变成一个图像 png 并且这样做并强加一个透明背景,alpha 等于零只是部分透明。图像仅在白色纸上是完全透明的,如果纸是彩色的,则图像是部分透明的。我使用 iText 创建图像。

   mLinearLayout.setDrawingCacheEnabled(true);

    mLinearLayout.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
            View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));

     mLinearLayout.layout(0, 0,  642,  400);


    mLinearLayout.buildDrawingCache(true);

    mBitmapLayoutPreview = Bitmap.createBitmap(mLinearLayout.getDrawingCache());
    mLinearLayout.setDrawingCacheEnabled(false); //lose transparency


    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    mBitmapLayoutPreview.compress(Bitmap.CompressFormat.PNG, 100 , stream);
    Canvas canvas = new Canvas(mBitmapLayoutPreview);
    canvas.drawColor(Color.TRANSPARENT);

    final Paint paint = new Paint();
    paint.setAlpha(0);
    canvas.drawBitmap(mBitmapLayoutPreview, 0, 0, paint);
    Image myImg = Image.getInstance(stream.toByteArray()); //is only partially transparent

我看到部分透明度是由 colorspace = 3 引起的,我是 myImg。我正在使用 iText 创建 pdf 文件

我没有使用 Canvas 但我设置了 BackgroundColor Transparent:

    mLinearLayout.setBackgroundColor(Color.TRANSPARENT);
    mLinearLayout.setDrawingCacheEnabled(true);

    mLinearLayout.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
            View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));


    mLinearLayout.layout(0, 0,  642,  400);

    mLinearLayout.buildDrawingCache(true);
    Log.i(TAG, "The color of background is: " +mCardLayout.getAlpha());

    mBitmapLayoutPreview = Bitmap.createBitmap(mLinearLayout.getDrawingCache());


    mLinearLayout.setDrawingCacheEnabled(false); // clear drawing cache

mBitmapLayoutPreview 是我的 LinearLayout 背景 Transparent