2012-02-07 3 views
0

Я пишу приложение для камеры, которая этот учебный курса: http://marakana.com/forums/android/examples/39.htmlAndroid пользовательского результат камеры ориентация изображения

Теперь я могу использовать камеру и получить данные изображения после пользователя нажмите кнопку. Но у меня проблема, что предварительный просмотр косо, так что я добавить следующий код в 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.

Вот мой 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 это небольшой вид, что для предварительного просмотра камеры

Button1 и button2 являются кнопки, когда я нажал на , камера фиксирует изображение и устанавливает отображаемые данные, соответствующие изображениюView1/imageView2

Есть некоторые проблемы:

  1. установить ширину и высоту макета, а также максимальную ширину и высоту 100dp, также тип шкалы для fitCenter. Но, похоже, это не так, как я хочу. Я хочу, чтобы изображение отображалось внутри границы. Неужели я ошибаюсь в настройках компоновки?

  2. Изображение всегда в ландшафте, даже я сделал снимок в портретном режиме.

Кроме того, я хочу, чтобы добавить кнопку для переключения включения/выключения камеры, но я не могу понять, как это сделать.

Может кто-нибудь предложить решение для меня? Спасибо.

ответ

0

Посмотрите на мой ответ here, так как это похоже на ту же проблему, что и у вас.

+0

Извините, я отправил неправильный код выше. У меня нет проблем на поверхности. Но как я могу получить ориентацию данных изображения. Кажется, что я не могу получить EXIF ​​из данных – Hanon

0

Вам необходимо вызвать метод setRotation объекта объекта камеры, а затем установить параметр на камеру.

Реализовать OrientationListener, чтобы получить вращение использовать это значение в setRotation

Пример использования кода here.

+0

Я пробовал его с жестким кодом до 0, 90, 180 и 270. Но данные изображения все еще всегда в ландшафте. Я хочу, чтобы изображение всегда снималось в портретном режиме и отображало его как портретный режим. – Hanon

+0

Удерживайте устройство в режиме potrait и установите его как 90, и вы должны получить изображение в портретном режиме. – bluefalcon

Смежные вопросы