カメラの画像をcanvas
に描画し、画像を含むview
をbitmap
に変換し、その上に描画します。キャンバス。最後にbitmap
が外部ストレージに保存されます。カメラの上にイメージまたはビューをオーバーレイする方法
問題はcanvas
が、保存された画像サイズの代わりにプレビューウィンドウのサイズに合わせてサイジングしているようです。ここで
は、カメラ画像の上に取り込んだビューをマージされた私の活動のクラスの一部です:
Bitmap myImage = BitmapFactory.decodeByteArray(imageData, 0,
imageData.length, options);
Bitmap mutableBitmap = myImage.copy(Bitmap.Config.ARGB_8888, true);
Paint paint = new Paint();
Canvas canvas = new Canvas(mutableBitmap);
view.setDrawingCacheEnabled(true);
viewCapture = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);
canvas.drawBitmap(viewCapture, 0, 0, paint);
fileOutputStream = new FileOutputStream(dir + "/" + imgName + ".jpg");
BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream);
mutableBitmap.compress(CompressFormat.JPEG, quality, bos);
これは、撮影した画像の上にビットマップを保存しますが、異なるサイズのために、その左上隅にオフセットされています。
私は
Camera.Parameters p = mCamera.getParameters();
Camera.Size myBestPreviewSize = getBestPreviewSize(w, h, p);
p.setPreviewSize(myBestPreviewSize.width, myBestPreviewSize.height);
Camera.Size myBestPictureSize = getBestPictureSize(w, h, p);
p.setPictureSize(myBestPictureSize.width, myBestPictureSize.height);
明らかにこれを実行して、私のsurfaceChangedに以下のようにして、異なるサイズを設定するよ、私は、プレビューウィンドウのための最高の解像度、撮影画像のための最高の解像度を取得しています。私は問題が2つの異なる決議によって引き起こされたと信じていますが、なぜ私が立ち往生しているのかを考え出します。
うまくいけば、次の画像は、より良い問題を説明します:
この画像は、プレビューウィンドウが表示されます。あなたが見ることができるように、Androidはイメージの真ん中にあります。
上記の画像をキャプチャして保存します。私はそれを見に行くと、これはそれがどのように見えるかです:
注意してくださいAndroidは、もはや中央の左上隅にあります。次のカメラプレビューに
に示すように、別の試験として
、私は上記のように正確に画像をキャプチャし、それを表示する際に、アンドロイドが正確に切断された画面オフアンドロイド途中まで移動しましたプレビューウィンドウにどのように表示されていたのですが、もう一度左上に表示されます。
Sandbox.javaを編集できる場合は、getTransformedBitmap()メソッドを作成できます。新しいBitmapと新しいCanvasを作成し、新しいビットマップをパラメータとして渡すだけでよいでしょう。キャンバスでdraw()を呼び出し、ビットマップを返します。それはview.getDrawingCache()を使うよりもうまくいくかもしれません。 – thomas88wp
@ thomas88wp私はあなたのコメントを何百回も読んでいるに違いない。新しいビットマップを作成するにはどうすればよいですか?私のためにもう少し詳しく説明できますか?あなたの助けに感謝! – Badams
紛らわしいコメントをおかけして申し訳ありません。あなたのスクリーンショットを見て、私はいくつかのコードで別の解決策を提案します(下記参照)。 – thomas88wp