2012-01-23 10 views
2

可能性の重複:
Can i save lots of bitmaps to one bitmap? (2d)どのようにcanvas.saveとcanvas.restoreを使用できますか?

私はcanvas.saveとcanvas.restoreが実際にどのように機能するか疑問に思います。

どのように私はそれが働きたい、どのように私はそれを使用する(しかしdoesnt仕事)。

  1. キャンバスをロック
  2. canvas.save()(int型を保存)unlockandpostうちで描画いくつかの
  3. は、いくつかのより多くの図面に
  4. をしますかポストキャンバス
  5. はキャンバスを復元ステップ3の
  6. さらに6つのループを繰り返します(ループ)

本当に必要なのは、ある段階(背景)にキャンバスを保存してからその上にオブジェクトを描画することです。キャンバスを更新するたびに背景を描画する必要はありません。

答えて

9

Canvas.save()&復元()キャンバスに添付されたビットマップには作用しません。キャンバスの描画環境、特に現在のクリッピング領域とマトリックスを制御するために存在します。

回転したスプライトを描画する場合は、save()とrestoreを使用します。これを行うには、まず現在のキャンバスの状態を保存してから、元のピクセルアドレス(0,0)がスプライトを移動させたい場所に移動してから回転させます()、次にdrawBitmap()を実行できます。最後に、図面環境を通常の状態に戻すことができます()。

あなたは基本的に毎回背景を描くことになります。これが複雑な操作の場合は、オフスクリーンのビットマップに格納します。バックグラウンドを1回の操作で描画できる限り(drawBitmapなど)、パフォーマンスはあまり高くありません。

+0

ありがとうございます。ビットマップの配列からビットマップを作成する方法はありますか?またはsimulair –

+0

いいえ。とにかく、そのようなショートカットは必要ないはずです...drawableのリストを反復し、それぞれをキャンバスに描画する単純な作業です。 –

+0

2d配列の場合、50行で20行、非常に多くの描画がフレームごとに行われます。 –

0

私はそれを理解しました。 キャンバスを使用して、たくさんの画像を含む背景を1つのビットマップに描画できます。

最初に、希望のint heightとint widthで空のビットマップを作成します。これはすべてのタイルを描画するビットマップ(小さな画像)になります。

Bitmap background = Bitmap.createBitmap(width、heigth、Bitmap.Config.ARGB_4444);

(Bitmap.Config.ARGB_4444の構文についてはわかりません) 新しいキャンバス(ビットマップ)でキャンバスを作成すると、キャンバスがビットマップに書き込まれます。

キャンバスキャンバス新しいキャンバス(背景);

あなたが好きなようにキャンバスを書くことができます。すべては、後で使用するためにビットマップに保存されます。

関連する問題