Android Lollipopで新しいCamera2APIをテストしました。サポートされているプレビューサイズを取得したい:
StreamConfigurationMap streamConfigurationMap = cameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
Size[] sizes = streamConfigurationMap.getOutputSizes(SurfaceTexture.class);
最高プレビューサイズは、解像度2560x1600pxのSamsung Galaxy TabSで1440x1080pxです。したがって、私のpreviewSizeは1440x1080pxで、TextureViewの表面サイズは2560x1600pxなので、画像が歪んでいます。
非推奨の古いCameraAPIをテストしました。
Camera.Parameters parameters = camera.getParameters();
List<Camera.Size> sizes = parameters.getSupportedPictureSizes();
上記のコードは、次のようなプレビューサイズの32のさまざまな組み合わせを返します。2560x1920
、1920x1080
、1080x1920
、2560x2560
など。その場合、最適なサイズを選択して正しい画像を表示することができます。
新しいAPIに最適なサイズを強制する方法がわかりません。解決策はプレビューを表示するビューのサイズを変更することですが、組み込みのカメラアプリはフルスクリーンモードで正しく機能します。すべての提案を事前に感謝します!
@Alex Cohnが言ったように、CameraAPI2を採用するかどうかはメーカー次第です。
CameraAPI2がサポートされているかどうかを確認できます。camCharacteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);
は、Camera API2の サポートレベル に対応するint
を返します。取得するレベルがCameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY
に等しい場合、基本的に、電話の製造元はCameraAPI2をサポートしていません。
->結果として、SCALER_STREAM_CONFIGURATION_MAP
はCameraAPI1でアクセス可能な解像度とは異なる解像度を返す場合があります。これがあなたが得る理由です
プレビューの最大サイズは1440x1080pxです
4年前に質問されたことに本当にショックを受けました...そしてCameraAPI2へのアップグレードを気にしないメーカーがまだあります。 Camera API2はより多くの機能を提供しますが、CameraAPI1は結局死んでいないのかもしれません。
少なくとも、Camera API2を使用する場合に実際にターゲットにするデバイスの数を知るために、いくつかの断片化情報があればいいでしょう(LEGACYサポートのためにすべてのAndroid L以上ではない、開発者は値するそれを知るために)
交換
Size[] sizes = streamConfigurationMap.getOutputSizes(SurfaceTexture.class);
に
Size[] sizes = streamConfigurationMap.getOutputSizes(ImageFormat.JPEG)