【问题标题】:Take camera screenshot while recording - Like in Galaxy S3?录制时拍摄相机截图 - 就像在 Galaxy S3 中一样?
【发布时间】:2012-10-18 19:08:11
【问题描述】:

我正在开发一个使用 SurfaceView 进行显示的相机应用。

我可以截取 SurfaceView 的屏幕截图(并将其保存为位图)
使用 getDrawingCache()(在包含 SurfaceView 的布局上)
还有 canvas.drawBitmap(...)

但是在这两种方式中,位图始终是透明/空白的。

我有 Galaxy S3,我可以看到他们的相机中有这个功能 他们究竟是怎么做到的?

谢谢!

【问题讨论】:

    标签: android video camera surfaceview


    【解决方案1】:

    几个小时后,我得到了一个很好的解决方案。
    也许这不是最好的方法,但对我来说已经足够了。

    private long start;
    private long end;
    private long period;
    

    在媒体记录器启动后首先获取启动时间:

    private void startRecording()
    {
       mMediaRecoder.start();
       start = System.currentTimeMillis();
    }
    

    然后,当你按下屏幕/按钮进行截图时,保存期间:

    private void captureImage()
    {
       end = System.currentTimeMillis();
       period = end - start;
    }
    

    最后,当您停止录制时,使用句点和媒体检索器获取位图:

    private void saveVideo()
    {
       MediaMetadataRetriever retriever = new MediaMetadataRetriever();
       //path -> the path to the video
       retriever.setDataSource(path);
       Bitmap bitmap = retriever.getFrameAtTime(period * 1000,MediaMetadataRetriever.OPTION_CLOSEST);
    }
    

    希望对你有帮助!

    【讨论】:

      【解决方案2】:

      没有为表面视图维护缓存。这就是您无法获取缓存位图的原因。实际上,当任何视图被渲染并且它的缓存被打开时,视图位图被渲染时,系统不会进行数学计算来绘制以提高视图的渲染效率。

      【讨论】:

      • 我的意思是一个包含 SurfaceView 的布局。我编辑了问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      • 2016-02-13
      • 2011-07-15
      • 2015-03-07
      • 1970-01-01
      • 2013-07-30
      • 1970-01-01
      相关资源
      最近更新 更多