如何在保持透明背景的同时转换图像中的 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
我有一个 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