当前位置: 首页 > 知识库问答 >
问题:

纵向模式下的相机预览方向(三星设备)

严玉泽
2023-03-14

我正在用相机显示预览。应用程序始终处于纵向模式(禁用横向模式)。相机预览总是逆时针旋转90度,我无法更改它(无论是使用setDisplayOrientation还是使用p.set(“方向”,“肖像”)和p.set(“旋转”,90))。

预览总是这样旋转还是依赖于设备?如果在纵向模式下总是这样,我可以在之后旋转图像。

我将手机保持在“纵向模式”,但cameraPreview处于横向模式(即,我看到某个物体旋转了90度)。

在许多设备上工作正常LG Optimus Samsung Galaxy S2

某些三星设备的问题(三星GALAXY ACE DUOS)

                             /*
            Copyright Sergi Martínez (@sergiandreplace)

            Licensed under the Apache License, Version 2.0 (the "License");
            you may not use this file except in compliance with the License.
            You may obtain a copy of the License at

                http://www.apache.org/licenses/LICENSE-2.0

            Unless required by applicable law or agreed to in writing, software
            distributed under the License is distributed on an "AS IS" BASIS,
            WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
            See the License for the specific language governing permissions and
            limitations under the License.

            */

            package com.appunta.android.ui;

            import java.io.IOException;
            import java.lang.reflect.Method;

            import android.content.Context;
            import android.hardware.Camera;
            import android.util.AttributeSet;
            import android.util.Log;
            import android.view.Display;
            import android.view.Surface;
            import android.view.SurfaceHolder;
            import android.view.View;
            import android.view.SurfaceHolder.Callback;
            import android.view.SurfaceView;
            import android.view.WindowManager;

            public class CameraView extends SurfaceView implements Callback {

                Camera camera;
                SurfaceHolder previewHolder;
                private boolean isPreviewRunning;

                public CameraView(Context ctx) {
                    super(ctx);

                    init();
                }

                private void init() {
                    previewHolder = this.getHolder();
                    previewHolder.addCallback(this);
                    previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
                }

                public CameraView(Context context, AttributeSet attrs) {
                    super(context, attrs);
                    init();
                }

                public CameraView(Context context, AttributeSet attrs, int defStyle) {
                    super(context, attrs, defStyle);
                    init();
                }

                public void surfaceCreated(SurfaceHolder holder) {
                    camera = Camera.open();
                    setCameraDisplayOrientation(camera);
                    try {
                        camera.setPreviewDisplay(holder);
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                    camera.startPreview();
                }

                public void surfaceChanged(SurfaceHolder holder, int format, int width,
                        int height) {
                    if (isPreviewRunning) {
                        camera.stopPreview();
                    }
                    setCameraDisplayOrientation(camera);
                    previewCamera();
                }

                public void previewCamera() {
                    try {
                        camera.setPreviewDisplay(previewHolder);
                        camera.startPreview();
                        isPreviewRunning = true;
                    } catch (Exception e) {
                    }
                }

                public void surfaceDestroyed(SurfaceHolder arg0) {
                    camera.stopPreview();
                    camera.release();
                }

                public void startCamera() {
                    previewCamera();
                }

                public void stopCamera() {
                    camera.stopPreview();
                    camera.release();
                }

                protected static void setDisplayOrientation(Camera camera, int angle) {
                    Method downPolymorphic;

                    try {
                        downPolymorphic = camera.getClass().getMethod(
                                "setDisplayOrientation", new Class[] { int.class });
                        if (downPolymorphic != null)
                            downPolymorphic.invoke(camera, new Object[] { angle });
                    } catch (Exception e1) {
                    }

                }

                private void setCameraDisplayOrientation(Camera camera) {
                    // android.hardware.Camera.CameraInfo info = new
                    // android.hardware.Camera.CameraInfo();
                    // android.hardware.Camera.getCameraInfo(0, info);
                    // Display display = ((WindowManager) getContext().getSystemService(
                    // Context.WINDOW_SERVICE)).getDefaultDisplay();
                    // int rotation = display.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;
                    // if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
                    // result = (info.orientation + degrees) % 360;
                    // result = (360 - result) % 360; // compensate the mirror
                    // } else { // back-facing
                    // result = (info.orientation - degrees + 360) % 360;
                    // }
                    // setDisplayOrientation(camera, result);

                    setDisplayOrientation(camera, 90);
                }

            }

共有2个答案

欧阳昊焱
2023-03-14

使用-设置DisplayOrientation(90);如果不起作用,请答复。。

陆啸
2023-03-14

这是我对SurfaceCreated方法的SurfaceHolder的实现。回调,它工作正常,请检查您的实现中是否缺少任何内容

public void surfaceCreated(SurfaceHolder holder) {
        // The Surface has been created, acquire the camera and tell it where
        // to draw.
        try {
            Log.d(TAG, "surfaceCreated(), holder"+holder.toString());
            mCamera = null;
            mCamera = Camera.open();
            Log.d(TAG, "surfaceCreated(), mCamera="+mCamera);
            mCamera.setDisplayOrientation(90);
            mCamera.setPreviewDisplay(holder);
            Camera.Parameters params= mCamera.getParameters();
            params.set("jpeg-quality", 72);
            params.set("rotation", 90);
            params.set("orientation", "portrait");
            params.setPictureFormat(PixelFormat.JPEG);
                    mCamera.setParameters(params);
            createZoomlayout();

        } catch (Exception e) {
            Toast.makeText(CameraInterface.this,
                    " surfaceCreated " + e.getMessage(), Toast.LENGTH_LONG)
                    .show();
            e.printStackTrace();
        }
    }
 类似资料:
  • 我使用相机仅显示预览(不拍照或录制视频)。 该应用程序始终处于竖屏状态(横向模式被禁用)。相机预览始终旋转90度ccw,我无法更改它(无论是还是和。 预览总是这样旋转还是依赖于设备?如果在纵向模式下总是这样,我可以在之后旋转图像。 或者有没有办法正确设置摄像头?我读了很多关于这个的帖子,但没有一个答案对我有用(Galaxy s2,Android v2.3)

  • setPrintedPortrait(): self 实例 $config = ['path' => './tests']; $excel = new \Vtiful\Kernel\Excel($config); ​ $excel->fileName('printed_portrait.xlsx', 'sheet1') ->setPrintedPortrait() // 设置打印方向为

  • 我创建了一个相机应用程序,我希望我的应用程序在所有4种可能的方向上打开,并相应地更新相机预览。为此,我使用了以下我复制的方法:Android-相机预览是横向的 我已经测试了这些值,并在三星galaxy tab2上进行了测试,最终获得了正确的方向,一切正常。当我在htc one的手机上试用时,它根本不起作用!!!!!所有的e方向都是完全错误的!所以我得出结论,thre必须是2种类型的设备(或更多…请

  • 如果我用我的相机在android的肖像模式下拍摄一张照片,然后将其加载为位图并将其绘制到画布上,它看起来会逆时针旋转90度并以横向方向旋转。我使用

  • 我试图在用户拍照时检测相机方向,以便在画布上绘制时进行调整。问题是我不能使用设备方向,因为即使方向锁定打开,我也需要它才能工作。 摄像机设置 视频流快照 来自David Walsh的参考代码 - 浏览器摄像头

  • 所以我用下面的方法设置了摄像头- 如您所见,我在摄像机参数上使用了setRoation()来实际指定图像方向,并在摄像机本身上使用了setDisplayOriation()来处理表面预览中的方向更改。(注释和未注释的代码似乎都没有保留方向。当我检查数据时,它返回0) 之后,在回调中,我甚至尝试使用矩阵保存具有方向的图像。 实际问题 > 当我在肖像模式下拍照时,一切正常。它看起来像是被拿走了。 但是