Android相机表现得很奇怪

时间:2012-05-21 21:13:39

标签: android camera

我第一次在Android SDK中使用Camera,并且最初的问题就像大多数一样......

我的肖像活动,但我的相机非常奇怪。它的字面意思是翻转图像。因此,如果我从顶部伸出手指,它会从预览中的左侧进入...我现在已经多次推文我的代码而且没有任何改变它。这是我的预览课程:

@Override
public void surfaceChanged(SurfaceHolder holder, int f, int w, int h) {
    Camera.Parameters params = camera.getParameters();
    params.setPreviewSize(w,h);
    params.set("orientation", "portrait");
    camera.setParameters(params);
    camera.startPreview();
}

@Override
public void surfaceCreated(SurfaceHolder h) {
    try {
        camera = Camera.open();
        camera.setPreviewDisplay(h);
        camera.setPreviewCallback(new PreviewCallback(){
            @Override
            public void onPreviewFrame(byte[] data, Camera c) {
                FileOutputStream fos = null;
                try {
                    //if(!(new File(Environment.getExternalStorageDirectory()+"/MemeMe/Temp/").exists())){
                    //  
                    //}
                    File memeTempPath = new File(Environment.getExternalStorageDirectory()+"/MemeMe/Temp/");
                    File[] tempFiles = memeTempPath.listFiles();
                    for(int i = 0; i < tempFiles.length; i++){
                        tempFiles[i].delete();
                    }
                    fos = new FileOutputStream(String.format(Environment.getExternalStorageDirectory()+"/MemeMe/Temp/"+System.currentTimeMillis()));
                    fos.write(data);
                    fos.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                Preview.this.invalidate();
            }
        });
    } catch (IOException e) {
        e.printStackTrace();
    }
}

现在这是我的活动:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    preview = new Preview(this);
    previewL = (FrameLayout)findViewById(R.id.cameraLayout);
    previewL.addView(preview);

我对此问题感到困惑。我认为预览应该根据方向改变...我也尝试做params.setRotation()并做了关于我能想到的每一个轮换90,180,270,360并且它根本没有改变它。

清单:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

1 个答案:

答案 0 :(得分:1)

对于预览,有一种不同的方法来调整相机图像旋转......在setDisplayOrientation()的android文档中对其进行了详细描述。它自API级别8开始可用。

2.1(第7级)更新:

2.2之前这段代码通常有用

Camera.Parameters parameters = camera.getParameters();
parameters.set("orientation", "portrait"); // for some
parameters.set("rotation", 90);  // for others
// or parameters.setRotation(90);
camera.setParameters(parameters);

问题是,它似乎停止在2.2+的某些设备上工作,所以如果你真的需要支持2.1+,你可以尝试setDisplayOrientation的反射,如果它失败,设置{{1}参数

"orientation"