Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android,我的应用程序中的摄像头是旋转的_Android - Fatal编程技术网

Android,我的应用程序中的摄像头是旋转的

Android,我的应用程序中的摄像头是旋转的,android,Android,我在我的应用程序中打开摄像头,即使在我手中旋转设备时,摄像头显示屏也会一直旋转90度 守则: import java.io.IOException; import java.util.List; import android.content.Context; import android.hardware.Camera; import android.view.Display; import android.view.Surface; import android.view.Surfac

我在我的应用程序中打开摄像头,即使在我手中旋转设备时,摄像头显示屏也会一直旋转90度

守则:

import java.io.IOException;
import java.util.List;    
import android.content.Context;
import android.hardware.Camera;
import android.view.Display;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.WindowManager;

public class CameraSurfaceView extends SurfaceView implements SurfaceHolder.Callback
{
        private SurfaceHolder holder;
        private Camera camera;
        private Context context;
        public CameraSurfaceView(Context context) 
        {
                super(context);

                //Initiate the Surface Holder properly
                this.holder = this.getHolder();
                this.holder.addCallback(this);
                this.holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
                this.context = context;
          }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width,
                int height) {               

        // Now that the size is known, set up the camera parameters and  begin
            // the preview.
            Camera.Parameters parameters = camera.getParameters();
            List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();
            Camera.Size size = previewSizes.get(0);
            parameters.setPreviewSize(size.width, size.height);           

            Display display = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();

            if(display.getOrientation() == Surface.ROTATION_0)
            {
                //parameters.setPreviewSize(height, width);                           
                parameters.setRotation(90);
            }

            if(display.getOrientation() == Surface.ROTATION_90)
            {
                //parameters.setPreviewSize(width, height);                           
            }

            if(display.getOrientation() == Surface.ROTATION_180)
            {
                //parameters.setPreviewSize(height, width);               
            }

            if(display.getOrientation() == Surface.ROTATION_270)
            {
                //parameters.setPreviewSize(width, height);
                parameters.setRotation(180);
            }                
            camera.setParameters(parameters);                
            camera.startPreview();              
        }    
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
             try
             {
                     //Open the Camera in preview mode
                     this.camera = Camera.open();
                     this.camera.setPreviewDisplay(this.holder);
             }
             catch(IOException ioe)
             {
                     ioe.printStackTrace(System.out);
             }              
        }    
        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            // Surface will be destroyed when replaced with a new screen
            //Always make sure to release the Camera instance
            camera.stopPreview();
            camera.release();
            camera = null;              
        }
  }
import java.io.IOException;
导入java.util.List;
导入android.content.Context;
导入android.hardware.Camera;
导入android.view.Display;
导入android.view.Surface;
导入android.view.SurfaceHolder;
导入android.view.SurfaceView;
导入android.view.WindowManager;
公共类CameraSurfaceView扩展了SurfaceView,实现了SurfaceHolder.Callback
{
私人土地持有人;
私人摄像机;
私人语境;
公共CameraSurfaceView(上下文)
{
超级(上下文);
//正确启动表面支架
this.holder=this.getHolder();
this.holder.addCallback(this);
这个.holder.setType(SurfaceHolder.SURFACE\u TYPE\u PUSH\u BUFFERS);
this.context=上下文;
}
@凌驾
公共无效表面更改(表面文件夹持有者,整型格式,整型宽度,
整数高度){
//现在已经知道大小,请设置相机参数并开始
//预览。
Camera.Parameters=Camera.getParameters();
List previewSizes=参数。getSupportedPreviewSizes();
Camera.Size Size=previewSizes.get(0);
parameters.setPreviewSize(size.width、size.height);
Display Display=((WindowManager)context.getSystemService(context.WINDOW_SERVICE)).getDefaultDisplay();
if(display.getOrientation()==Surface.ROTATION\u 0)
{
//参数.setPreviewSize(高度、宽度);
参数设置旋转(90);
}
if(display.getOrientation()==Surface.ROTATION_90)
{
//参数。setPreviewSize(宽度、高度);
}
if(display.getOrientation()==Surface.ROTATION_180)
{
//参数.setPreviewSize(高度、宽度);
}
if(display.getOrientation()==Surface.ROTATION_270)
{
//参数。setPreviewSize(宽度、高度);
参数设置旋转(180);
}                
设置参数(参数);
camera.startPreview();
}    
@凌驾
已创建的公共空白表面(表面持有人){
尝试
{
//在预览模式下打开相机
this.camera=camera.open();
this.camera.setPreviewDisplay(this.holder);
}
捕获(ioe异常ioe)
{
ioe.printStackTrace(系统输出);
}              
}    
@凌驾
公共空间表面覆盖(表面覆盖物持有人){
//更换新滤网时,表面将被破坏
//始终确保释放摄影机实例
camera.stopPreview();
相机。释放();
摄像机=零;
}
}
有什么想法吗?谢谢

p、 s我如何知道我的设备在生产线上的正确选择是什么

List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();
List previewSizes=parameters.getSupportedPreviewSizes();

查看方法参考中给出的示例代码。请注意,在调用
setPreviewDisplay(SurfaceHolder)

之前,应该执行这些操作。请查看方法参考中给出的示例代码。请注意,在调用
setPreviewDisplay(SurfaceHolder)

之前,您应该执行这些操作。当我希望正确显示相机预览时,我使用了此代码

 Camera.Parameters parameters = camera.getParameters();
            parameters.set("jpeg-quality", 100);
            parameters.set("orientation", "landscape");
            parameters.set("rotation", 90);
            parameters.setPictureFormat(PixelFormat.JPEG);

            parameters.setPreviewSize(w, h);
            camera.setParameters(parameters);

当我想正确显示相机预览时,我使用了这段代码

 Camera.Parameters parameters = camera.getParameters();
            parameters.set("jpeg-quality", 100);
            parameters.set("orientation", "landscape");
            parameters.set("rotation", 90);
            parameters.setPictureFormat(PixelFormat.JPEG);

            parameters.setPreviewSize(w, h);
            camera.setParameters(parameters);

这是一个基于某些手机硬件设置的错误。由于Android是硬件,所以无法对其进行修补。你只需要在代码中旋转图像。这是一个基于某些手机硬件设置的错误。由于Android是硬件,所以无法对其进行修补。您只需在代码中旋转图像。尝试使用
Camera.setDisplayOrientation(degrees)
而不是
Camera.Parameters.setRotation(degrees)
尝试使用
Camera.setDisplayOrientation(degrees)
而不是
Camera.Parameters.setRotation(degrees)