LayerDrawable转换为位图

10

我正在使用一个LayerDrawable来合并多个Drawable。现在,我想将我的LayerDrawable导出到一个文件中。

我尝试了这种方法:

Bitmap b = ((BitmapDrawable)myLayerDrawable).getBitmap();
--> ClassCastException...

我能做些什么?

4个回答

15

你试过将Drawable绘制到位图Canvas上吗?我认为调用顺序大致如下:

Bitmap b = Bitmap.createBitmap(int width, int height, Bitmap.Config config);
myLayerDrawable.draw(new Canvas(b));

那么您可以将 Bitmap 对象写入输出流。


谢谢。我认为有些地方不对劲:使用 W=550,H=550 和配置 config=ARGB_8888,Bitmap b 的宽度和高度变成了 -1。如果将其导出为文件,图片大小正常,但是完全为空白... - Francois
4
尝试在可绘制对象上调用setBounds方法。如果你不告诉它要画什么,它就不会画任何东西。 - Kyle P
谢谢!最终我终于发现为什么我从来没有成功地使用Bitmap.createBitmap :) - Francois

7

感谢在我之前回答过这个问题的两位用户(@Kyle P@Anjum Shrimali)。受到他们答案的启发,我尝试了以下方法并成功解决了我的问题:

final int width = myLayerDrawable.getIntrinsicWidth();
final int height = myLayerDrawable.getIntrinsicHeight();

final Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
myLayerDrawable.setBounds(0, 0, width, height);
myLayerDrawable.draw(new Canvas(bitmap));

5
感谢您的帮助。但像我这样的初学者需要更具体的代码。我尝试了以下代码,它对我有效。
Bitmap b = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
layerDrawable.setBounds(0, 0, getWidth(), getHeight());
layerDrawable.draw(new Canvas(b));

最终b (Bitmap) 是所需的合并位图。

1

如果有人想要 @Mir-Ismaili 的答案的 Kotlin 版本

val height = layerDrawable.intrinsicHeight
val width = layerDrawable.intrinsicWidth
val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
layerDrawable.setBounds(0, 0, width, height)
layerDrawable.draw(Canvas(bitmap))

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