キャプチャしたプレビューを表示するためにSurfaceView
を使用しています。プレビューにwidth = 1080、height = 1920を使用したいと思います。プレビューのサイズはどこで設定できますか?
答えを探してみましたが、すべてカメラバージョン1用です。 Android.hardware.camera2を使用しています。
private void takePreview() {
try {
final CaptureRequest.Builder previewRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
previewRequestBuilder.addTarget(mSurfaceHolder.getSurface());
mCameraDevice.createCaptureSession(Arrays.asList(mSurfaceHolder.getSurface(), mImageReader.getSurface()), new CameraCaptureSession.StateCallback() // ③
{
@Override
public void onConfigured(CameraCaptureSession cameraCaptureSession) {
if (null == mCameraDevice) return;
mCameraCaptureSession = cameraCaptureSession;
try {
previewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
previewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
previewRequestBuilder.set(CaptureRequest.JPEG_THUMBNAIL_SIZE, new Size(1080,1920));
CaptureRequest previewRequest = previewRequestBuilder.build();
mCameraCaptureSession.setRepeatingRequest(previewRequest, null, childHandler);
} catch (CameraAccessException e) {
Log.e("takePreview","onConfigured(CameraCaptureSession cameraCaptureSession)",e);
}
}
@Override
public void onConfigureFailed(CameraCaptureSession cameraCaptureSession) {
Log.e("takePreview","onConfigureFailed");
}
}, childHandler);
} catch (CameraAccessException e) {
Log.e("takePreview","CameraAccessException");
}
}
createCaptureSession への参照に記載されているとおり:
SurfaceViewへの描画の場合:SurfaceViewのSurfaceが作成されたら、 setFixedSize(int、int) を使用してSurfaceのサイズを設定し、 getOutputSizes(SurfaceHolder.class )次に getSurface() を呼び出してSurfaceを取得します。アプリケーションによってサイズが設定されていない場合、カメラデバイスによって、サポートされている最も近い1080p未満のサイズに丸められます。
GoogleがGitHubで提供しているCamera2Basicの例をご覧ください: https://github.com/googlesamples/Android-Camera2Basic
メインフラグメントには、特定のデバイスのオプションのプレビューサイズを選択するメソッドがあります。サイズをハードコーディングするのではなく、アプリをより柔軟にしたい場合は、これがより良いアプローチかもしれませんが、それでも設定サイズに固執したい場合でも、結果がどのように使用されるかを確認できます。
要約すると、TextureViewのサイズを、必要なプレビューのサイズに設定するだけです。
メソッド名は「chooseOptimalSize」で、次のコメント/説明が含まれています。
/**
* Given {@code choices} of {@code Size}s supported by a camera, choose the smallest one that
* is at least as large as the respective texture view size, and that is at most as large as the
* respective max size, and whose aspect ratio matches with the specified value. If such size
* doesn't exist, choose the largest one that is at most as large as the respective max size,
* and whose aspect ratio matches with the specified value.
*
* @param choices The list of sizes that the camera supports for the intended output
* class
* @param textureViewWidth The width of the texture view relative to sensor coordinate
* @param textureViewHeight The height of the texture view relative to sensor coordinate
* @param maxWidth The maximum width that can be chosen
* @param maxHeight The maximum height that can be chosen
* @param aspectRatio The aspect ratio
* @return The optimal {@code Size}, or an arbitrary one if none were big enough
*/