3

私がSOで見たものから、私がやりたいことは可能であれば難しいですが、少なくとも誰かが私がやりたいことをするためのより簡単な方法を提案できることを願っています. 以下のコードは、アイテムをすべてカスタム SurfaceView 内でキャンバスに描画します。私がやりたいのは、キャンバスを表示することに加えて、キャンバス上のすべてをファイルに保存して、いくつかのアクティビティで使用することですが、方法がわかりません。

public void draw()
{
    if(holder.getSurface().isValid()) {
        Canvas canvas = holder.lockCanvas();
        canvas.drawColor(0, Mode.CLEAR);
        drawSurface(canvas);
        canvas.translate(-56, 30);
        int i = 0;
        for(Picture a: accessories) {
            canvas.translate(0, a_offset[i]);
            if(a!=null) {
                canvas.drawPicture(a);
            }
            i++;
        }           
        holder.unlockCanvasAndPost(canvas);  
    }
}

private void drawSurface(Canvas canvas) {
    Rect rect = new Rect();
    rect.set(37*screenWidth/480, 146*screenHeight/800, (37 + 300)*screenWidth/480, (146 + 300)*screenHeight/800);
    canvas.drawBitmap(avatar, null, rect, null);
}

ファイルを保存するために私が現在行っていることは、基本的に、上記のメソッドのコピーをビットマップから作成されたキャンバス (canvas = new Canvas(bitmap)の代わりにholder.lockCanvas) と異なる数で使用して、位置とサイズを正しくすることです。メソッドを組み合わせて、少なくとも異なるメソッドを避けるためにいくつかのパラメーターを与えることができますが、可能であれば、同じキャンバスを使用して画像を描画し、ファイルを保存したいと思います。

4

1 に答える 1

1

キャンバスを保存するべきではありません。画像変換行列と画像自体を保存する必要があります。次に、取得したい場合は、画像をロードし、そのマトリックスをロードし、マトリックスを画像に適用すれば問題ありません。

または、キャンバス オブジェクト自体を BLOB データとして格納してから、BLOB を使用してデータベースから再作成することもできます。私はこれを行ったことはありませんが、いずれにしてもお勧めしません。

于 2012-10-23T20:24:59.220 に答える