質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

0回答

208閲覧

【android】カメラで撮影した画像とpreviewの画像の比率が異なってしまう

SoooS

総合スコア6

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/11/23 01:36

androidで自撮りのカメラ機能を実装しています。
カメラ撮影時は、正常なのですが、撮影後プレビューを確認すると横に潰れたような画像(本来の画像よりも、細くなってしまう)になってしまいます。
previewSizesとpictureSizesの調整をしているのですが、どうしてもプレビューの画像が横に潰されてしまいます。
他に考慮する点や、解決策は何か無いでしょうか?
コードは、次のように実装しています。

宜しくお願いいたしますm(_ _)m

環境
android studio 3.1
compileSdkVersion 27
buildToolsVersion '27.0.0'

Java

1 @Override 2 public void surfaceCreated(SurfaceHolder holder) { 3 if (ContextCompat.checkSelfPermission(mContext, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED 4 || ContextCompat.checkSelfPermission(mContext, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 5 requestPermissions(new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE}, 50); 6 } else { 7 startCamera(); 8 } 9 } 10 11 public void startCamera() { 12 try { 13 mCamera = getCameraInstance(); 14 Camera.Parameters parameters = mCamera.getParameters(); 15 parameters.setPreviewSize(determineBestPreviewSize(parameters).width, determineBestPreviewSize(parameters).height); 16 parameters.setPictureSize(determineBestPictureSize(parameters).width, determineBestPictureSize(parameters).height); 17 mCamera.setParameters(parameters); 18 mCamera.setDisplayOrientation(90); 19 mCamera.setPreviewDisplay(mHolder); 20 mCamera.startPreview(); 21 } catch (IOException e) { 22 e.printStackTrace(); 23 } 24 } 25 26 public static Camera.Size determineBestPreviewSize(Camera.Parameters parameters) { 27 List<Camera.Size> sizes = parameters.getSupportedPreviewSizes(); 28 return determineBestSize(sizes); 29 } 30 31 public static Camera.Size determineBestPictureSize(Camera.Parameters parameters) { 32 List<Camera.Size> sizes = parameters.getSupportedPictureSizes(); 33 return determineBestSize(sizes); 34 } 35 36 protected static Camera.Size determineBestSize(List<Camera.Size> sizes) { 37 Camera.Size bestSize = null; 38 long used = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); 39 long availableMemory = Runtime.getRuntime().maxMemory() - used; 40 for (Camera.Size currentSize : sizes) { 41 int newArea = currentSize.width * currentSize.height; 42 long neededMemory = newArea * 4 * 4; // newArea * 4 Bytes/pixel * 4 needed copies of the bitmap (for safety :) ) 43 boolean isDesiredRatio = (currentSize.width / 4) == (currentSize.height / 3); 44 boolean isBetterSize = (bestSize == null || currentSize.width > bestSize.width); 45 boolean isSafe = neededMemory < availableMemory; 46 if (isDesiredRatio && isBetterSize && isSafe) { 47 bestSize = currentSize; 48 } 49 } 50 if (bestSize == null) { 51 return sizes.get(0); 52 } 53 return bestSize; 54 } 55

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問