我正在開發一個使用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在疊加而不是實際的緩存圖像上工作。 –