0

Foreground Camera Plugin はデフォルトで横向きに設定されていますが、どうすればカメラを縦向きに設定できますか? xml を縦向きに設定しましたが、カメラのプレビューの向きを変更する方法が見つからないようです。

更新: lanscape を修正するために以下を追加しました

Camera.Parameters parameters = mCamera.getParameters();
parameters.setPictureFormat(PixelFormat.JPEG); 
parameters.set("orientation", "portrait");
parameters.setRotation(90);
mCamera.setParameters(parameters);
mCamera.setDisplayOrientation(90);

これは、正方形のプレビューを作成するための私の現在のコードです

getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);  
int wwidth = displaymetrics.widthPixels;
mFrameLayout.getLayoutParams().height = wwidth;
mFrameLayout.getLayoutParams().width = wwidth;

ただし、プレビューが引き伸ばされ、画像が引き伸ばされたように見えます。

  1. ビューを引き伸ばさない特定の幅に必要な高さを取得するにはどうすればよいですか?

  2. 下の余分な部分を隠すことはできますか? (撮影後にトリミングするので)

  3. また、カメラがズームされているように見え、撮影された写真は、より多くのコンテンツを含むプレビューで表示されるものと同じではありません.

誰でもヒントを教えてもらえますか?

ありがとう

4

1 に答える 1

1

向きを変更する際のストレッチを修正するには、mCamera.setPreviewDisplay() を呼び出す前に、これらの行を ForegroundCameraPreview.java ファイルの「surfaceChanged」メソッドに追加します。

android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo();
android.hardware.Camera.getCameraInfo(Camera.CameraInfo.CAMERA_FACING_BACK, info);
int rotation = mActivity.getWindowManager().getDefaultDisplay().getRotation();
int degrees = 0;
switch (rotation) {
    case Surface.ROTATION_0: degrees = 0; break;
    case Surface.ROTATION_90: degrees = 90; break;
    case Surface.ROTATION_180: degrees = 180; break;
    case Surface.ROTATION_270: degrees = 270; break;
}    
int result;
result = (info.orientation - degrees + 360) % 360;

mCamera.setDisplayOrientation(result);

CameraActivity からアクティビティ (mActivity) を取得する必要があります (たとえば、ForegroundCameraPreview のコンストラクターに渡し、プライベート変数に保存するなど)。

于 2013-11-21T18:36:27.423 に答える