【问题标题】:Capture camera preview and GLSurfaceView to a file将相机预览和 GLSurfaceView 捕获到文件中
【发布时间】:2011-04-06 18:02:14
【问题描述】:

我正在尝试为相机预览和叠加的 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;
 }

我将不胜感激对此的任何想法/ sn-ps。非常感谢。

【问题讨论】:

    标签: android glsurfaceview


    【解决方案1】:

    我做过类似的事情,虽然有点复杂,但也不算太糟糕。

    在我的情况下,我使用的是我解码为位图的相机预览帧。然后从该位图中获取一个画布,将其传递给我想要在图片顶部绘制的视图(surfaceview 或其他)上的 draw() 调用。

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

    您需要使用自己的 View 实现来处理画布大小将发生变化的事实,并且您需要在应用程序正常运行时调用 draw() 和当您手动调用它时,因为图片大小的画布几乎肯定会与绘制到屏幕上的内容不同。

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

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

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      • 2014-07-23
      • 1970-01-01
      • 2016-11-14
      • 2020-04-07
      • 2016-10-16
      相关资源
      最近更新 更多