Android 将相机预览和GLSURFACHEVIEW捕获到文件

Android 将相机预览和GLSURFACHEVIEW捕获到文件,android,glsurfaceview,Android,Glsurfaceview,我正在尝试“拍摄”相机预览和覆盖的GLSURFACHEVIEW。 我通过camera.takePicture和PictureCallback使camera预览元素正常工作,但现在需要包括GLSurfaceView元素,或者单独捕获当前屏幕并将两个位图合并到一个文件中。 我尝试使用下面的代码从surfaceView中获取图像,但这只会导致一个空位图。 如果您对此有任何想法/片段,我将不胜感激。非常感谢。我也做过类似的事情,虽然有点复杂,但也不太可怕 在我的例子中,我使用相机预览帧,我解码成位图。然

我正在尝试“拍摄”相机预览和覆盖的GLSURFACHEVIEW。 我通过camera.takePicture和PictureCallback使camera预览元素正常工作,但现在需要包括GLSurfaceView元素,或者单独捕获当前屏幕并将两个位图合并到一个文件中。 我尝试使用下面的代码从surfaceView中获取图像,但这只会导致一个空位图。
如果您对此有任何想法/片段,我将不胜感激。非常感谢。

我也做过类似的事情,虽然有点复杂,但也不太可怕

在我的例子中,我使用相机预览帧,我解码成位图。然后从位图中获取画布,并将其传递给调用,以便在视图surfaceview或其他我希望在图片顶部绘制的视图上绘制

            Bitmap bm;
            MySurfaceViewImpl sv;
            Canvas c = new Canvas(bm);
            sv.draw(c);
您需要使用自己的视图实现来处理画布大小将要更改的事实,并且您需要在调用以绘制应用程序的正常运行过程中发生的事件和手动调用时重新缩放事件,因为来自图片大小的画布几乎肯定会与正在绘制的内容不同被吸引到屏幕上

另外,我使用预览帧而不是捕获图片的主要原因是内存限制。很少有手机支持较小尺寸的图片,但所有手机都支持合理尺寸的预览框。将全尺寸相机图片转换成位图可能内存太多。在堆小于24MB的设备上,我可以使用大约600 x 480的图像和在上面绘制的大约4个视图,但它会变得很紧

在您的情况下,您可能需要缩小位图,以便能够将画布从它传递到视图

祝你好运

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