2012-10-29 32 views
3

我正在开发一个使用SurfaceView进行显示的相机应用程序。拍摄时的相机截图 - 就像在Galaxy S3中一样?

我能采取SurfaceView的截图(并将其保存为一个位图)
与getDrawingCache()(上包装了SurfaceView布局)
,并与canvas.drawBitmap(...)

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

我有银河S3,我可以看到他们在他们的相机中有这个功能 他们究竟做得如何?

谢谢!

回答

2

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

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

首先得到的开始时间媒体记录器启动后右:

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

然后,当u按屏幕/按钮采取截图,保存期:

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

希望它可以帮助你!

0

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

+0

我的意思是包装SurfaceView的布局。我编辑了问题 – dor506

+0

SurfaceView在叠加而不是实际的缓存图像上工作。 –

相关问题