Наложение изображений на предварительный просмотр камеры SurfaceView

У меня есть SurfaceView , который используется для рисования изображений, и я хотел бы наложить их на прямую трансляцию из камера телефона.

В настоящее время SurfaceView , который содержит изображения, имеют белый фон, но если бы я наложил их на канал камеры телефона, они должны были бы быть прозрачными. Рисование камеры и анимации не может быть выполнено на одном и том же SurfaceView .

Как лучше всего использовать несколько видов, которые включают управление камерой и рисование изображений? Можно ли сделать SurfaceView прозрачным?

32
задан GobiasKoffi 9 September 2010 в 02:25
поделиться

3 ответа

Может этот код помочь? `

1
ответ дан 27 November 2019 в 21:10
поделиться

Я добился успеха со следующим подходом.

Сначала создайте XML-файл макета, который выглядит примерно так (обратите внимание на порядок двух представлений):

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="vertical">

    <com.yourcustom.OverlayView
        android:id="@+id/overlay" android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    </com.yourcustom.OverlayView>

    <SurfaceView android:id="@+id/surface"
        android:layout_width="fill_parent" android:layout_height="fill_parent">
    </SurfaceView>

</FrameLayout>

OverlayView является подклассом SurfaceView с реализацией потоков рисования и анимации. Другой SurfaceView будет поверхностью, которая обрабатывает предварительный просмотр камеры. Внутри onCreate вы должны настроить свои представления следующим образом:

    mView = (OverlayView)this.findViewById(R.id.overlay);
    mView.getHolder().setFormat(PixelFormat.TRANSLUCENT); 

    mSurfaceView = (SurfaceView)this.findViewById(R.id.surface);
    mSurfaceHolder = mSurfaceView.getHolder();
    mSurfaceHolder.addCallback(this);
    mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

Вы должны добавить реализацию SurfaceHolder.Callback в SurfaceHolder из mView, который обрабатывает поток анимации. Пример реализации этого в подклассе и использования потоков анимации/рисования можно найти в старом примере LunarLander здесь: http://developer.android.com/resources/samples/LunarLander/src/com/example/android/lunarlander/LunarView.html

Кроме того, вы настраиваете SurfaceView камеры так же, как в этом примере: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html

6
ответ дан 27 November 2019 в 21:10
поделиться

Я тоже делаю дополненное приложение и столкнулся с той же проблемой, что и вы. Информации о том, как правильно ее решить, очень мало. Но я нашел фреймворк под названием mixare — он позволяет создавать AR-приложения для Android. Вам обязательно стоит взглянуть на источник — выглядит довольно многообещающе. Надеюсь, что это поможет вам.

6
ответ дан 27 November 2019 в 21:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: