Android アプリケーションを作成しており、キャンバス ビットマップ (具体的には Samsung SPen SDK) を使用しています。私は現在、動作させたい機能を持っていますが、ロードの実装方法が原因でランタイムが長すぎます。
私が持っているもの:
保存:キャンバスをビットマップとして保存し、このビットマップを特定のサイズの X 個の小さなビットマップに分割します (書き込みのあるセクションのみを保存します)。このセクションの効率に問題はありません。
読み込み中: :
- 次に、X 個の小さいビットマップを取得し、それらを組み合わせて、
canvas.drawBitmap(imgs[x][y], xCoordinate, yCoordinate, null)
書き込みのあるすべての画像 (imgs[][]
= ビットマップの配列) を使用して元のビットマップを再形成します。 setclearImageBitmap(BitmapName)
次に、SCanvasView クラスの関数を使用して、これをキャンバスの前景に表示します。これは、1 つの大きな画像をフォアグラウンドにロードするのに実行時間の約 90% がかかるという事実を除けば、問題なく機能します。
private void loadCanvasImage(){ Bitmap bmOverlay = Bitmap.createBitmap(mSCanvas.getWidth(), mSCanvas.getHeight(), Bitmap.Config.ARGB_8888); キャンバス canvas = new Canvas(bmOverlay); int yCo = 0; for(int yCount=0; yCount }
質問: これを行うためのより効率的な方法があるかどうか疑問に思っています。潜在的にこのアイデアを実装することによって:
複数のビットマップを特定の x、y 座標でキャンバス ビュー (できればフォアグラウンド) に追加する (書き込みのない小さなビットマップを表示する必要がないため、高速になる可能性があります)。
実装に失敗したもう 1 つの方法は、再作成した 1 つの大きなビットマップを含むキャンバスに SCanvasView を設定することでした。onDraw(Canvas) メソッドをオーバーライドして、canvas の結果を渡すことでこれを行いました。canvas.drawBitmap(imgs[x][y], xCoordinate, yCoordinate, null)