我正在开发一个使用SurfaceView进行显示的相机应用程序。拍摄时的相机截图 - 就像在Galaxy S3中一样?
我能采取SurfaceView的截图(并将其保存为一个位图)
与getDrawingCache()(上包装了SurfaceView布局)
,并与canvas.drawBitmap(...)
但是在两种方式中,位图总是透明/空白。
我有银河S3,我可以看到他们在他们的相机中有这个功能 他们究竟做得如何?
谢谢!
我正在开发一个使用SurfaceView进行显示的相机应用程序。拍摄时的相机截图 - 就像在Galaxy S3中一样?
我能采取SurfaceView的截图(并将其保存为一个位图)
与getDrawingCache()(上包装了SurfaceView布局)
,并与canvas.drawBitmap(...)
但是在两种方式中,位图总是透明/空白。
我有银河S3,我可以看到他们在他们的相机中有这个功能 他们究竟做得如何?
谢谢!
好几小时后,我得到了一个很好的解决方案。
也许这不是最好的方式,但它对我来说已经够好了。
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);
}
希望它可以帮助你!
没有为面视图维护缓存。这就是为什么你无法获得缓存的位图。实际上,当任何视图呈现并且其缓存打开时,视图位图呈现时,系统不进行数学计算来进行绘制以提高视图呈现效率。
我的意思是包装SurfaceView的布局。我编辑了问题 – dor506
SurfaceView在叠加而不是实际的缓存图像上工作。 –