Android の Camera2 API を使って カメラのプレビュー画面を表示する
の続きです。
Color Effect
Color Effect (色効果) は、
カメラデバイスからの画像の色合いを変更する機能です。
この機能は機種依存です。
この機能の解釈と実装は、Androidデバイスのメーカーに委ねられている。
すべての機種で同じ動作をするとは限らない。
Camera2 API には下記の Color Effect が用意されている。
この機能がサポートされていないときは、OFF のみをリストする。
- OFF
- MONO
- NEGATIVE
- SOLARIZE
- SEPIA
- POSTERIZE
- WHITEBOARD
- BLACKBOARD
- AQUA
reference : CameraCharacteristics.html#CONTROL_AVAILABLE_EFFECTS
プレビュー画面に Color Effect を適用する
プレビュー画面をターゲットにして Color Effect を要求する。
// プレビュー画面 をターゲットにする
surface = new Surface(textureView.getSurfaceTexture())
captureBuilder.addTarget(surface);
// Color Effect モードを設定する
captureBuilder.set(CaptureRequest.CONTROL_EFFECT_MODE, effect);
// Color Effectを要求する
captureRequest = captureBuilder.build();
captureSession.capture(captureRequest, captureCallback, backgroundHand);
CaptureRequest が完了したら、Color Effectを繰り返し要求する
onCaptureCompleted
// Color Effectを繰り返し要求する
captureSession.setRepeatingRequest(captureRequest, captureCallback, backgroundHandler);
[reference : CaptureRequest#CONTROL_EFFECT_MODE]
(https://developer.android.com/reference/android/hardware/camera2/CaptureRequest.html#CONTROL_EFFECT_MODE)
Color Effect を適用した写真を撮る
プレビュー画面と写真は、連動していない。
写真を撮る時は、ImageReader をターゲットにしてColor Effectを要求する。
// ImageReader をターゲットにする
surface = imageReaderStill.getSurface();
captureBuilder.addTarget(surface);
// Color Effect モードを設定する
captureBuilder.set(CaptureRequest.CONTROL_EFFECT_MODE, effect);
// Color Effectを要求する
captureSession.capture(captureBuilder.build(), captureCallback, backgroundHand);
スクリーンショット
SEPIAの例
サンプルコードをgithub に公開した。
https://github.com/ohwada/Android_Samples/tree/master/Camera224