录制时拍摄相机屏幕截图 - 就像在Galaxy S3中一样?

时间:2012-10-29 12:57:24

标签: android video camera surfaceview

我开发了一个使用SurfaceView进行显示的相机应用程序。

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:2)

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

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);
}

希望它可以帮到你!

答案 1 :(得分:0)

没有为surfaceview维护缓存。这就是为什么你无法获得缓存的位图。实际上,当任何视图渲染并且其缓存被打开时,视图位图是渲染的,系统不会进行数学计算以进行绘制,以提高渲染视图的效率。