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


  • 相关阅读:
    jar强退出 JVM报错:Failed to write core dump. Core dumps have been disabled.
    配置 DHCP Snooping 和 IPSG
    OpenOffice
    RabbitMQ ADD
    YAPI 接口管理
    mysql:1153 Got a packet bigger than ‘max_allowed_packet’ bytes的解决方法
    修改端口的VLAN
    阿里云OSS设置跨域访问
    seata连接nacos 报错
    Linux登录超时问题
  • 原文地址:https://www.cnblogs.com/james1207/p/3317889.html
Copyright © 2011-2022 走看看