Захват предварительного просмотра камеры и GLSurfaceView в файл

1

Я пытаюсь "сфотографировать" как предварительный просмотр камеры, так и наложенный GLSurfaceView. У меня есть элемент предварительного просмотра камеры, работающий через camera.takePicture() и PictureCallback(), но теперь нужно либо включать элементы GLSurfaceView, либо захватывать текущий экран отдельно, и объединять два растровых изображения в один файл. Я попытался захватить изображение из surfaceView, используя приведенный ниже код, но это просто приводит к нулевому растровому изображению.

public Bitmap grabImage() {

    this.setDrawingCacheEnabled(true);
     Bitmap b = null;
     try {

     b = this.getDrawingCache(true);
     if (b==null) {

         b = this.getDrawingCache(true);
     }
     } catch (Exception e) {
         e.printStackTrace();
     }
     this.setDrawingCacheEnabled(false);
     return b;
 }

код >

Я был бы признателен за любые мысли/фрагменты по этому поводу. Большое спасибо заранее.

Теги:
glsurfaceview

1 ответ

0

Я сделал что-то подобное, и это было немного запутанно, но не слишком ужасно.

В моем случае я использую кадр предварительного просмотра, который я декодирую в растровое изображение. Затем возьмите холст из этого растрового изображения, чтобы передать его, чтобы вызвать draw() в представлениях (surfaceview или иначе), которые я хочу нарисовать поверх изображения.

            Bitmap bm;
            MySurfaceViewImpl sv;
            Canvas c = new Canvas(bm);
            sv.draw(c);

Вам нужно будет использовать свою собственную реализацию View для обработки того факта, что размер холста изменится, и вам нужно будет перемасштабировать вещи между вызовами draw(), которые происходят при нормальной работе вашего приложения, и когда вы называете это вручную, поскольку холст из размера изображения почти наверняка будет отличаться от того, что рисуется на экране.

Кроме того, основная причина, по которой я использую рамки предварительного просмотра, а не захваченные снимки, связана с ограничениями памяти. Очень мало телефонов поддерживают небольшие изображения, но все поддерживают разумные размеры для кадров предварительного просмотра. Получение полноразмерного изображения камеры в растровое изображение, вероятно, слишком много памяти. На устройствах с кучей менее 24 МБ я в порядке с изображением 600 x 480 и около 4 просмотров, которые нарисованы поверх этого, но он становится плотным.

В вашем случае вам, вероятно, придется масштабировать растровое изображение, чтобы иметь возможность передать холст от него к представлению.

Удачи!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню