安卓相机人像方向

Posted

技术标签:

【中文标题】安卓相机人像方向【英文标题】:android camera portrait orientation 【发布时间】:2012-01-20 21:56:50 【问题描述】:

我在我的应用程序中使用相机。我只是使用intent 来启动摄像头

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
        startActivityForResult(cameraIntent, 101);

捕获的图像自动进入landscape view。我如何使cameraportrait view 中捕获图像

【问题讨论】:

我也遇到了同样的问题,请告诉我你是怎么解决的...... @SivaK 我没有使用默认的相机应用程序,而是创建了自己的相机视图来捕捉图像 Seshu Vinay - 感谢您的回复,是否有任何示例代码或博客用于创建我们自己的相机视图 下面有一个答案,给出了一些示例代码 谢谢 - 刚才我浏览了 FoodSpotting 应用程序,它使用默认相机,以纵向拍摄照片,当照片以相同的纵向模式检索时......我会搜索它。 ..谢谢 【参考方案1】:

如果设备有v2.2 或更高版本,您可以使用camera.setDisplayOrientation(90) 将相机方向旋转为纵向。在低于 v2.2 的设备中,相机将仅以横向显示,因此图像将以横向显示。检查这些帖子Using Camera in Portrait Orientation,Camera is wrong unless keyboard is open。

【讨论】:

如果不实际覆盖相机类,我认为这不会起作用 - 在这里调用意图是不够的【参考方案2】:

试试这个。

        Parameters param = mCamera.getParameters();

        switch(mDisplay.getRotation())
        case Surface.ROTATION_0:
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO)
                mCamera.setDisplayOrientation(90);
                Log.d("Rotation_0", "whatever");
            
            else
                Log.d("Rotation_0", "whatever");
                param.setRotation(90);
                mCamera.setParameters(param);
            
            break;
        case Surface.ROTATION_90:
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO)
                mCamera.setDisplayOrientation(0);
                Log.d("Rotation_0", "whatever");
            
            else
                Log.d("Rotation_90", "whatever");
                param.setRotation(0);
                mCamera.setParameters(param);
            
            break;
        

【讨论】:

【参考方案3】:

这里,此代码也适用于 android 相机应用程序[人像模式] 中支持的所有类型的方向。

int rotation = this.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;


【讨论】:

谢谢蒂姆·卡斯特林斯

以上是关于安卓相机人像方向的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS OpenCV 相机中将相机预览旋转到人像

Android相机以人像模式保存图片

摄影后期课程内容

Android相机预览人像比例

将相机预览旋转到人像 Android OpenCV 相机和 Xamarin

Android | 教你如何使用HwCameraKit接入相机人像模式