Android Camera
Android Programming Tips

Abstract#

Topic#

Androidでちゃんとカメラが扱えるようになりたいが、結構奥が深い。camera2を使いたいが、サンプルとしてこれ[4]がシンプル。このサンプルで、TextureView.getSurfaceTexture()を呼ぶとき、NullPointerExceptionが起きやすい。Availableになってから呼ばないといけないので、呼び出し元をListenerのonSurfaceTextureAvailable()から呼ぶ必要があることに注意[5]
TextureViewだったら
mTextureView.getBitmap();
で、ただのViewだったら、
arView.getDrawingCache(false);
でBitmapが取れる。
Canvasクラスをつかって重ね書きしましょう。
Bitmap offBitmap = Bitmap.createBitmap(cameraMap.getWidth(), cameraMap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvasForCombine = new Canvas(offBitmap);
canvasForCombine.drawBitmap(cameraMap, null, new Rect(0, 0, cameraMap.getWidth(), cameraMap.getHeight()), null);
canvasForCombine.drawBitmap(overlayMap, null, new Rect(0, 0, cameraMap.getWidth(), cameraMap.getHeight()), null);

Reference#

  1. [#4]株式会社BELLSOFT, 2018年4月13日, Androidアプリにおける最小限のカメラ機能の実装, https://bellsoft.jp/blog/system/detail_538
  2. [#5]TextureView, https://developer.android.com/reference/android/view/TextureView