Im developing a camera app which uses SurfaceView for display.
I\'m able to take screenshot of the SurfaceView (and save it as a bitmap)
with getDrawingCache() (
No cache is maintained for the surfaceview. That is why you are not able get the cached bitmap. Actually when any view is render and its cache is turned on the view bitmap is render no mathematical calculation is done by system for drawing to improve the efficiency of rendering of view.
Well after hours, I got a nice solution for that.
Maybe it isn't the best way, but it is good enough for me.
private long start;
private long end;
private long period;
First get a start time right after the media recorder starts:
private void startRecording()
{
mMediaRecoder.start();
start = System.currentTimeMillis();
}
Then, when u press on the screen/button for taking screenshot, save the period:
private void captureImage()
{
end = System.currentTimeMillis();
period = end - start;
}
Finally, when you stop recording, get the bitmap using the period and the Media retriever:
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);
}
Hope it helps you!