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

Drawableフェッチされるのは実際にはですBitmapDrawable。必要に応じて、を使用してこれを確認できますinstanceof

その場合、あなたがしなければならないのは:

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

編集Drawable:がではないことが判明した場合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 に答える