キャンバスを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 に保存されることです。私はキャンバスが初めてです...だから、どんな助けでも大歓迎です