【问题标题】: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 应用程序,它使用默认相机,以纵向拍摄照片,当照片以相同的纵向模式检索时......我会搜索它。 ..谢谢

标签: android android-camera android-camera-intent landscape-portrait


【解决方案1】:

如果设备有v2.2 或更高版本,您可以使用camera.setDisplayOrientation(90) 将相机方向旋转为纵向。在低于 v2.2 的设备中,相机将仅以横向显示,因此图像将以横向显示。检查这些帖子Using Camera in Portrait OrientationCamera 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;
    
    }
    

    【讨论】:

    • 谢谢蒂姆·卡斯特林斯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多