Я пытаюсь "сфотографировать" как предварительный просмотр камеры, так и наложенный 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;
}
код >
Я был бы признателен за любые мысли/фрагменты по этому поводу. Большое спасибо заранее.
Я сделал что-то подобное, и это было немного запутанно, но не слишком ужасно.
В моем случае я использую кадр предварительного просмотра, который я декодирую в растровое изображение. Затем возьмите холст из этого растрового изображения, чтобы передать его, чтобы вызвать draw() в представлениях (surfaceview или иначе), которые я хочу нарисовать поверх изображения.
Bitmap bm;
MySurfaceViewImpl sv;
Canvas c = new Canvas(bm);
sv.draw(c);
Вам нужно будет использовать свою собственную реализацию View для обработки того факта, что размер холста изменится, и вам нужно будет перемасштабировать вещи между вызовами draw(), которые происходят при нормальной работе вашего приложения, и когда вы называете это вручную, поскольку холст из размера изображения почти наверняка будет отличаться от того, что рисуется на экране.
Кроме того, основная причина, по которой я использую рамки предварительного просмотра, а не захваченные снимки, связана с ограничениями памяти. Очень мало телефонов поддерживают небольшие изображения, но все поддерживают разумные размеры для кадров предварительного просмотра. Получение полноразмерного изображения камеры в растровое изображение, вероятно, слишком много памяти. На устройствах с кучей менее 24 МБ я в порядке с изображением 600 x 480 и около 4 просмотров, которые нарисованы поверх этого, но он становится плотным.
В вашем случае вам, вероятно, придется масштабировать растровое изображение, чтобы иметь возможность передать холст от него к представлению.
Удачи!