2012-02-07 136 views
0

我寫這本教程自定義相機應用: http://marakana.com/forums/android/examples/39.html的Android定製相機的結果圖像方向

現在我能夠使用相機,讓用戶後的圖像數據點擊一個按鈕。 但我得到了預覽人行道所以我在surfaceCreated

@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    // Open the camera when the preview is created 
    Log.d("Callback", "[surfaceCreated]"); 
    theCamera = Camera.open(); 

    Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); 
    int displayRotation = display.getRotation(); 
    switch (displayRotation) { 
     case Surface.ROTATION_0:  theCamera.setDisplayOrientation(90); break; 
     case Surface.ROTATION_90:  break; 
     case Surface.ROTATION_180:  break; 
     case Surface.ROTATION_270:  theCamera.setDisplayOrientation(180); break; 
    } 
} 

添加以下代碼預覽很好的問題。 但是,當我得到圖像數據時,我使用BitmapFactory.decodeByteArray來獲取位圖,並將其設置爲我的xml佈局中定義的imageView。

這裏是我的main.xml

<SurfaceView 
    android:id="@+id/previewSurfaceView" 
    android:layout_width="100dp" 
    android:layout_height="100dp" 
    android:layout_gravity="center" /> 

<LinearLayout 
    android:id="@+id/linearLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="250px" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_vertical" 
     android:text="Button" /> 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:layout_gravity="center_vertical" 
     android:layout_weight="1" 
     android:maxHeight="100dp" 
     android:maxWidth="100dp" 
     android:scaleType="fitCenter" 
     android:src="@drawable/ic_launcher" /> 

</LinearLayout> 

<LinearLayout 
    android:id="@+id/linearLayout2" 
    android:layout_width="fill_parent" 
    android:layout_height="250px" > 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_vertical" 
     android:text="Button" /> 

    <ImageView 
     android:id="@+id/imageView2" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:layout_gravity="center_vertical" 
     android:layout_weight="1" 
     android:maxHeight="100dp" 
     android:maxWidth="100dp" 
     android:scaleType="fitCenter" 
     android:src="@drawable/ic_launcher" /> 

</LinearLayout> 

previewSurfaceView是小觀點,即相機預覽

按鈕1和按鈕2的按鈕,當我點擊,相機捕捉圖像並設置與imageView1/imageView2對應的圖像數據

存在一些問題:

  1. 我設置佈局寬度和高度,也是最大寬度和高度100dp,也是規模型向fitCenter。但它似乎不會顯示爲我想要的。我希望圖像顯示在邊界內。我在佈局設置中做錯了嗎?

  2. 即使我以縱向模式拍攝照片,圖像始終處於風景中。

此外,我想添加一個按鈕來切換上/下車拍照,但我無法弄清楚如何做到這一點。

有人可以爲我提出解決方案嗎?謝謝。

回答

0

看看我的回答here,因爲它似乎是你遇到的同樣的問題。

+0

對不起,我上面發佈了錯誤代碼。我在表面視圖中沒有問題。但是我怎樣才能獲得圖像數據的方向。看來,我不能從數據中獲得EXIF – Hanon 2012-02-07 08:37:24

0

您需要調用相機參數對象上的方法setRotation,然後在相機上設置參數。

落實OrientationListener獲得旋轉使用該值在setRotation

示例代碼使用here

+0

我試圖用硬編碼到0,90,180和270.但圖像數據仍然始終處於橫向。我希望圖像始終以縱向模式拍攝並以縱向模式顯示。 – Hanon 2012-02-07 09:06:36

+0

將設備保持在potrait模式並將旋轉設置爲90,並且您應該以縱向模式拍攝照片。 – bluefalcon 2012-02-07 09:14:26