星系选项卡上的肖像相机方向

时间:2011-04-11 07:19:12

标签: android camera rotation preview android-camera

我正在开发/用于三星Galaxy Tab(7英寸)。我的应用程序必须只处于纵向模式,即我已在应用程序和设备设置中将其锁定为纵向模式。问题是当我尝试旋转相机预览时,它当前以错误的方向旋转了90度。

现在这是我的surfaceCreated

    public void surfaceCreated(SurfaceHolder holder) {
    camera = Camera.open();
    try {
        camera.setPreviewDisplay(holder);
        Camera.Parameters parameters = camera.getParameters();
        parameters.setPictureFormat(PixelFormat.JPEG);
        parameters.set("orientation", "portrait");
        //camera.setDisplayOrientation(90); 
        parameters.setRotation(90);
        camera.setParameters(parameters);
    }
    catch (IOException exception) {
        camera.release();
    }
}

camera.setDisplayOrientation(90)似乎没有工作(它什么也没做,这就是为什么我已经评论过它)。但是参数.setRotation(90)确实完成了工作!但它会在应用程序的侧面创建一个丑陋的“条纹”“闪烁的颜色”。 setDisplayOrientation()应该对我有用,因为我正在运行android api 8(Froyo 2.2)!!

google上有一个关于轮换问题的问题http://code.google.com/p/android/issues/detail?id=1193#c26,但据我所知,它并没有为我的问题提出任何建议。

非常感谢任何与此问题相关的解决方案!谢谢!

3 个答案:

答案 0 :(得分:1)

这在三星Galaxy标签中适用于我:

public void surfaceCreated(SurfaceHolder holder)
    {
    // The Surface has been created, acquire the camera and tell it where to draw.
    mCamera = Camera.open();

    Parameters params = mCamera.getParameters();

    if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE)
    {
    params.set("orientation", "portrait");
    mCamera.setDisplayOrientation(90);
    }

    try
    {
    mCamera.setPreviewDisplay(holder);
    }
    catch (IOException exception)
    {
    mCamera.release();
    mCamera = null;
    }

    }

答案 1 :(得分:0)

如果您的应用程序仅设计为拍摄人像照片,那么最简单的方法是在拍摄照片后旋转图像数据,而不用担心相机设置。我不确定Tab是否有错误(我从未试图旋转相机预览)但是在你拍摄后旋转图像非常简单......问题是只有你需要知道哪种方式照片拍摄时,设备正在举行。如果这不是你的问题,那么不要担心它:)

答案 2 :(得分:0)

试试这个。我在Galaxy Tab上制作此代码并进行测试。代码效果很好

public void surfaceCreated(SurfaceHolder holder) {

    camera = Camera.open();

    try {
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO)
        {                       
         camera.setDisplayOrientation(90);
        } else {
          Parameters parameters = camera.getParameters();
          parameters.setRotation(90);       
          camera.setParameters(parameters); 
        }

        camera.setPreviewDisplay(holder);
    } catch (IOException exception) {
        camera.release();
    }
}