zoukankan      html  css  js  c++  java
  • android中Camera setDisplayOrientation使用

    在写相机相关应用的时候遇到捕获的画面方向和手机的方向不一致的问题,比如手机是竖着拿的,但是画面是横的,这是由于摄像头默认捕获的画面byte[]是根据横向来的,而你的应用是竖向的,解决办法是调用setDisplayOrientation来设置PreviewDisplay的方向,效果就是将捕获的画面旋转多少度显示。
    设置 preview 的顺时针旋转角度。这将影响 preview frames和拍照之后的相片显示。该方法主要用于垂直模式的应用。注意在旋转之前, front-facing cameras 的 preview显示是水平 flip 的,这就是说, image 是沿着 camera sensor 的垂直中心轴来反射的。所以用户可以像照镜子一样看到他们自己。这不会影响传入函数 onPreviewFrame(byte[], Camera) 的、JPEG 相片的、或记录的 video 的 byte array 的顺序, 你可以自己做旋转处理 。在preview 期间是不允许调用该方法的。如果你想要是你的照片和显示出来的角度一致,你可以参考下列代码:

     

    public static void setCameraDisplayOrientation (Activity activity, int cameraId, android.hardware.Camera camera) {
    	android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo();
    	android.hardware.Camera.getCameraInfo (cameraId , info);
    	int rotation = activity.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;
    	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;
    	}
    	camera.setDisplayOrientation (result);
    }


  • 相关阅读:
    Findbugs初探-使用idea获取findbugs插件
    idea 14运行java工程报错-Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable and mvn script match.
    Linux定时任务
    模块和包
    流程控制&&函数
    Python 变量与数据类型
    使用代码上传文件示例
    好用的代码示例
    JedisCluster API 整理
    springboot实现转发和重定向
  • 原文地址:https://www.cnblogs.com/james1207/p/3317889.html
Copyright © 2011-2022 走看看