カメラでプレビューと撮影された写真の構図が異なる問題

写真を撮影した後にギャラリーを見て気づいたのですが、画像のデータがおかしい事に気づきました。

撮影時に指定した範囲よりも大きい写真がとれていました。カメラの解像度と、画面の解像度の違いから発生がしているようです。

今回は撮影している範囲を画面内に抑えてみようかと思います。

カメラのサイズの変更をしていると思われる部分は

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){
 Camera.Parameters parameters = myCamera.getParameters();
 parameters.setPreviewSize(width, height);
 myCamera.setParameters(parameters);
 myCamera.startPreview();
}

でした。setPreviewSize()で値を指定しているようでしたが値を変更しても、サイズ画像が歪むなどが記載されておりました。

また。値を設定しない方がよい。ようです。(下記リンクを参照)

Android カメラアプリ作成メモ(1)

なので

parameters.setPreviewSize(width, height);

を消してしまいます。

そうすると、画面の大きさに合わせて、カメラのプレビューの比率が変わってしまいます。

ここで仮定をしたのですが、「カメラのプレビュー自体はSurfaceView全体に広がる仕様」なのかと思いました。

なので、surfaceViewをカメラの解像度に合わせた比率に変更をすれば、プレビューも解像度にあったサイズに変更されるのではないか。。と。

android.view.ViewGroup.LayoutParams lp = getLayoutParams();
lp.width = 100;
lp.height = 100;
setLayoutParams( lp );

としたら、カメラのプレビューのサイズが100×100になりました。仮定は正しかったようです。

つまりは、カメラの比率に合わせて、SurfaceViewを画面いっぱいに広がる形でに変更をしてみました。

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){
 Camera.Parameters parameters = myCamera.getParameters();
 android.view.ViewGroup.LayoutParams lp = getLayoutParams();
 int ch = parameters.getPreviewSize().height;
 int cw = parameters.getPreviewSize().width;
 if(ch/cw > height/width){
 lp.width = width;
 lp.height = width*ch/cw;
 }else{
 lp.width = height*cw/ch;
 lp.height = height;
 }
 setLayoutParams( lp );
 myCamera.setParameters(parameters);
 myCamera.startPreview();
}

これで、画面には撮影時に取得できる構図で、表示できるようになりました。

以上です。

前後の記事

前の記事:

次の記事:

関連の記事

コメントの投稿

  • サイト内検索

新作アプリの紹介

関連サイトの紹介

アンドロイドアプリ開発TIPS
きぐるみカメラ
ふらいぱん
アンドロイドのデザイン集
Page top↑