在Android 4.3上以纵向模式预览全屏摄像头

时间:2015-02-11 20:39:25

标签: android opengl-es android-camera surfaceview intelinde

我正在使用英特尔独立媒体库(特别是这个例子:https://github.com/INDExOS/media-for-mobile/blob/master/Android/samples/apps/src/com/intel/inde/mp/samples/CameraCapturerActivity.java

我的目标是在纵向模式下设置全屏预览,并以纵向模式录制视频。在横向模式下(全屏预览和录制),一切都很棒。但是在纵向模式下,我无法拉伸预览以垂直填充屏幕(即使我将曲面视图设置为最大尺寸)。我得到的最大尺寸是方形图像预览。我已经尝试使表面视图比屏幕更大,但仍然坚持使用方形预览和录制。

这是我的预览屏幕目前的样子: http://imgur.com/XUznvF1

这是我的代码:

public void createCamera() 
{
    Camera camera = Camera.open();
    Camera.Parameters parameters = camera.getParameters();

    List<Camera.Size> supportedResolutions = camera.getParameters().getSupportedPreviewSizes();
    parameters.setPreviewSize(supportedResolutions.get(0).width,   
    supportedResolutions.get(0).height);
    camera.setDisplayOrientation(90);  
    camera.setParameters(parameters);
}

public void createPreview() 
{
     GLSurfaceView surfaceView = new GLSurfaceView(getActivity().getApplicationContext());

     //This code is used to get display size to set surface view size
     Display display = getActivity().getWindowManager().getDefaultDisplay();
     Point size = new Point();
     display.getSize(size);
     int width = size.x;
     int height = size.y;

     surfaceView.setLayoutParams(new FrameLayout.LayoutParams(width, height));

     //Used to test that the surfaceview does cover the whole screen
     //surfaceView.setBackgroundColor(Color.RED);

     ((RelativeLayout)view.findViewById(R.id.myview)).addView(surfaceView, 0);

     preview = capture.createPreview(surfaceView, camera);
     preview.start();           
 }

2 个答案:

答案 0 :(得分:1)

英特尔开发人员网站上有一个帖子似乎是同一个问题。他们有一个解决方案,但您必须通过电子邮件请求库更新:

https://software.intel.com/en-us/forums/topic/542633

答案 1 :(得分:0)

我认为您的问题是您要将相机的预览尺寸设置为支持尺寸列表中的第一个尺寸。

List<Camera.Size> supportedResolutions = camera.getParameters().getSupportedPreviewSizes();
parameters.setPreviewSize(supportedResolutions.get(0).width, supportedResolutions.get(0).height);

您应该做的是遍历支持的尺寸列表,找到与屏幕尺寸/分辨率非常匹配的尺寸。

您可以查看this SO answer以获取示例代码段

<强>更新

下一步是调试它,找出它为什么不适合你。在你的情况下我会做的是打印出supportedResolutions列表的内容。由于您已经具有显示大小,我会将显示大小与supportedResolutions列表中的不同大小以及getOptimalSize方法返回的大小进行比较。 getOptimalSize方法可能无法找到最佳尺寸,并且可能需要根据您的需要调整方法。我调整了我的工作。

如果您需要更多帮助,请与我联系。