2012-05-21 20 views
0

我使用相機首次,像大多數第一次的問題接踵而至......Android相機在Android SDK怪怪

我有我的活動肖像,但我的相機是面向非常怪異。它從字面上翻轉了圖像。因此,如果我從頂部粘住我的手指,它會從預覽的左側進入...我一直在調用我的代碼很長一段時間,沒有什麼會改變它。這裏是我的預覽類:

@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

對於預覽,有不同的方法來調整相機圖像旋轉...它徹底Android文檔中用於描述setDisplayOrientation()。這是因爲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,如果失敗設置"orientation"參數

void setDisplayOrientation(Camera camera, int angle){ 
    try { 
    Method method = camera.getClass().getMethod("setDisplayOrientation", new Class[] { int.class }); 
    if (method != null) { 
     method.invoke(camera, new Object[] { angle }); 
     return; 
    } 
    } catch (Exception e) {} 
    Camera.Parameters parameters = camera.getParameters(); 
    parameters.set("orientation", "portrait"); 
    parameters.set("rotation", 90); 
    camera.setParameters(parameters); 
} 
+0

我應該有如上所述,對不起,我正在使用API​​ 7 – Brandon

+0

這是一個偉大的工作。謝謝您的幫助 – Brandon