Androidでカメラを作る ~ その6:10倍ズーム機能を付ける
カメラアプリ「WF-Camera」は、ズーム機能を搭載していません。それは、多くのスマートフォンのカメラが光学式ズームを持たないからです。また、デジタルズームは画像の劣化が激しく、あまり実用的ではありません。
しかし、不意に狙っている鳥が現れて、写真を撮りたいけど撮れないことが良く起こりました。そのような時は、画像が汚くてもいいから写真として残したいです。そこで、WF-Cameraに10倍ズーム機能を搭載することにしました。
1.プログラミング
CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(cameraId);
Rect m = characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
int oneWidth = m.width() / 10;
int oneHeight = m.height() / 10;
int centerWidth = m.width() / 2;
int centerHeight = m.height() / 2;
Rect zoom = new Rect((centerWidth - oneWidth / 2), (centerHeight - oneHeight / 2), (centerWidth + oneWidth / 2), (centerHeight + oneHeight / 2));
mPreviewCaptureRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, zoom);
10倍にするにあたり、画面中央の縦横1/10サイズを指定して実現させます。Camera2にはクロップサイズを指定する命令があるので、画面中央1/10サイズの矩形を指定します。そうすると縦横1/10サイズを実画面に拡大することから、10倍の画像になります。当然、画質は荒いです。
2.実際に撮影してみる
実際に撮影してみました。
パークゴルフ場1.0倍
木々に囲まれた快適なパークゴルフ場ですが、目的の被写体がまるで分かりません。
パークゴルフ場10倍
撮りたいのは、ゴールポストでした。被写体は分かるようになりましたが、画像の劣化が否めません。
池にいるカモ1.0倍
池にいるカモ?を撮影してみました。桟橋の先にいますが、小さくて良く分かりません。
池にいるカモ10倍
10倍にすると、はっきりとカモの姿が分かります。これだけ大きく映れば、写真の主題として成り立つと思います。
しかし、画像はやはり劣化しています。
3.総括
10倍モードは、倍率としては満足できるものになりました。これだけ拡大できれば、手で持つのに苦労する高倍率のカメラレンズに引けを取りません。
しかし、画質の劣化は予想通りですが起こってしまい、写真としての価値はありません。それでも、1.0倍で撮った写真をソフトウェアで10倍に拡大する手間を考えると、10倍モードで記録として写真を撮るのであれば、価値があると思います。
10倍モードを使う場面はありそうなので、WF-Cameraに搭載します。(ver 0.15で搭載しました)