在摄像头和手机摄像头的方向 [英] Camera orientation in webcam and phone

查看:198
本文介绍了在摄像头和手机摄像头的方向的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我做了一个应用程序,我必须记录video.when我使用网络摄像头,摄像头的方向是好的,我模拟器中运行它,但是当我在手机上运行同一个方向得到90度changed.cant了解ÿ它的发生任何一个可以帮助我吗?这里是我的code ---

 私人布尔prepareMediaRecorder(){
    myCamera = getCameraInstance();
    mediaRecorder =新MediaRecorder();
    myCamera.unlock();
    mediaRecorder.setCamera(myCamera);    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);    mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));    mediaRecorder.setOutputFile(/ SD卡/ video.mp4);    mediaRecorder.setMaxDuration(60000); //设置最大持续时间60秒。
    mediaRecorder.setMaxFileSize(5000000); //设置最大文件大小为5M    mediaRecorder.set previewDisplay(myCameraSurfaceView.getHolder()getSurface());    尝试{
        mediaRecorder prepare()。
    }赶上(IllegalStateException异常五){
        releaseMediaRecorder();
        返回false;
    }赶上(IOException异常五){
        releaseMediaRecorder();
        返回false;
    }
    返回true;}


解决方案

preVIEW方向取决于设备和摄像头方位的方位。

基本上你需要的是基于计算这些条件摄像机preVIEW的方向。

我们需要两个帮助方法:

1 - 计算设备的方向:

 公众诠释getDeviceOrientation(上下文的背景下){    INT度= 0;
    窗口管理器窗口管理=
            (窗口管理器)context.getSystemService(Context.WINDOW_SERVICE);
    INT旋转= windowManager.getDefaultDisplay()getRotation()。    开关(旋转){
        案例Surface.ROTATION_0:
            度= 0;
            打破;
        案例Surface.ROTATION_90:
            度= 90;
            打破;
        案例Surface.ROTATION_180:
            度= 180;
            打破;
        案例Surface.ROTATION_270:
            度= 270;
            打破;
    }    返回度;
}

2 - 计算摄像机preVIEW旋转:

 公共静态INT的get previewOrientation(上下文的背景下,诠释cameraId){   INT温度= 0;
   INT previewOrientation = 0;   Camera.CameraInfo cameraInfo =新Camera.CameraInfo();
   Camera.getCameraInfo(cameraId,cameraInfo);   INT deviceOrientation = getDeviceOrientation(背景);
   TEMP = cameraInfo.orientation - deviceOrientation + 360;
   previewOrientation =气温%360;    返回previewOrientation;
}

在你的code,前 mediaRecorder prepare();

  INT旋转=得到previewOrientation(背景下,cameraId);
mediaRecorder.setOrientationHint(旋转);

要使用这些方法需要上下文,并在使用摄像机ID。

i have done an application where i have to record video.when i run it in my emulator using web cam camera orientation is alright,but when i run the same in phone the orientation gets 90 degree changed.cant understand y its happening can any one help me ? here is my code---

private boolean prepareMediaRecorder(){
    myCamera = getCameraInstance();         
    mediaRecorder = new MediaRecorder();
    myCamera.unlock();
    mediaRecorder.setCamera(myCamera);

    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

    mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));

    mediaRecorder.setOutputFile("/sdcard/video.mp4");

    mediaRecorder.setMaxDuration(60000); // Set max duration 60 sec.
    mediaRecorder.setMaxFileSize(5000000); // Set max file size 5M

    mediaRecorder.setPreviewDisplay(myCameraSurfaceView.getHolder().getSurface());

    try {
        mediaRecorder.prepare();
    } catch (IllegalStateException e) {
        releaseMediaRecorder();
        return false;
    } catch (IOException e) {
        releaseMediaRecorder();
        return false;
    }
    return true;

}

解决方案

Preview orientation depends on the orientation of the device and camera orientation.

Basically what you need is to calculate the orientation of the camera preview based on those conditions.

We need two help methods:

1 - Calculate the device orientation:

public int getDeviceOrientation(Context context) {

    int degrees = 0;
    WindowManager windowManager =
            (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    int rotation = windowManager.getDefaultDisplay().getRotation();

    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;
    }

    return degrees;
}  

2 - Calculate Camera preview rotation:

public static int getPreviewOrientation(Context context, int cameraId) {

   int temp = 0;
   int previewOrientation = 0;

   Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
   Camera.getCameraInfo(cameraId, cameraInfo);

   int deviceOrientation = getDeviceOrientation(context);
   temp = cameraInfo.orientation - deviceOrientation + 360;
   previewOrientation = temp % 360;

    return previewOrientation;
}

At your code, before mediaRecorder.prepare();

int rotation = getPreviewOrientation(context, cameraId);
mediaRecorder.setOrientationHint(rotation);  

To use those methods is required a context and the camera Id in use.

这篇关于在摄像头和手机摄像头的方向的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆