Android пользовательская камера результат ориентации изображения - PullRequest
0 голосов
/ 07 февраля 2012

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

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 07 февраля 2012

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

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

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

0 голосов
/ 07 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...