0

キャンバスをSDカードに保存しようとしています。基本的に、onDraw(Canvas canvas) メソッドで 2 つのビットマップ (1 つを重ねて) を描画しています。しかし、ファイルを保存すると、最下層のビットマップのみが保存されます。ここに onDraw メソッドのコードを投稿しています。

    Paint paint = new Paint();
    paint.setColor(Color.BLACK);

    //rectangle for the first image
    rct = new Rect(10, 10, canvas.getWidth(), canvas.getHeight());

    // rectangle for the second image, the secong image is drawn where the user touches the screen
    new_image = new RectF(touchX, touchY, touchX + secondBitmap.getWidth(),
                touchY + secondBitmap.getHeight());

   //this is the bitmap that is drawn first
    canvas.drawBitmap(firstBitmap, null, rct, paint);

    //this is the bitmap drawn on top of the first bitmap on user touch
    canvas.drawBitmap(secondBitmap, null, new_image, paint);

    canvas.save();

MainActivity に記述された SD カードにキャンバスを保存するためのコードは次のとおりです。

   Bitmap bm = canvas.getDrawingCache() // canvas in an object of the class I extended from View
   String path = Environment.getExternalStorageDirectory()
            .getAbsolutePath();
   boolean exists = (new File(path)).exists();

   OutputStream outStream = null;
   File file = new File(path, "drawn_image" + ".jpg");

   try {
      outStream = new FileOutputStream(file);
      bmp.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
      outStream.flush();
      outStream.close();
      } 
   catch (FileNotFoundException e) {
    e.printStackTrace();
    } 
   catch (IOException e) {
        e.printStackTrace();
    }

問題は、キャンバス全体 (両方の画像) ではなく、ベース画像 (onDraw() メソッドの firstBitmap) のみが SDCard に保存されることです。私はキャンバスが初めてです...だから、どんな助けでも大歓迎です

4

1 に答える 1

2

getDrawingcache() が呼び出されると、ビューが無効になり、完全なキャッシュが取得されます。そのため、コードをデバッグし、onDraw() メソッドのすべての行が表示されているかどうかを確認してください。

于 2013-05-10T09:30:36.883 に答える