2

我使用以下代码获取当前壁纸:

  final WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
  final Drawable wallpaperDrawable = wallpaperManager.getDrawable();

如何从中创建位图?

就像我从 res 文件夹创建位图时一样,我使用它

    Resources res = getApplicationContext().getResources();
    b = BitmapFactory.decodeResource(res, R.drawable.wall);

我应该使用什么代码将当前壁纸放入位图中,以便可以在画布上绘制并将其用作动态壁纸背景?

4

1 回答 1

4

fetchedDrawable应该真的是一个BitmapDrawable. instanceof如有必要,您可以使用来验证这一点。

既然如此,你所要做的就是:

final Drawable wallpaperDrawable = wallpaperManager.getDrawable();
final Bitmap wallpaperBitmap = ((BitmapDrawable) wallpaperDrawable).getBitmap();

编辑:如果事实证明Drawableis NOT a BitmapDrawable,您可以使用以下方法对其进行转换(在此答案中找到,归功于André):

public static Bitmap drawableToBitmap(Drawable drawable) {
    if (drawable instanceof BitmapDrawable) {
        return ((BitmapDrawable)drawable).getBitmap();
    }

    Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap); 
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    drawable.draw(canvas);

    return bitmap;
}
于 2012-08-31T19:34:53.683 回答