2014-10-10 73 views
4

我正在嘗試實現包括在拍攝視頻時拍照的功能。這就是我總結使用SurfaceView的截圖方法的原因。
但是,當我嘗試拍攝SurfaceView的屏幕截圖時。我總是得到一張空白圖像。
在其中使用相機預覽拍攝SurfaceView的視頻

下面是我使用拍攝快照代碼:

View tempView = (View)MY_SURFACE_VIEW; 
tempView.setDrawingCacheEnabled(true); 
Bitmap tempBmp = Bitmap.createBitmap(tempView.getDrawingCache()); 
tempView.setDrawingCacheEnabled(false); 
//Saving this Bitmap to a File.... 

萬一你們可能會認爲這是一個重複的問題,讓我向你保證,我已經嘗試提供了以下解決方案在問這個問題之前,對於同樣的問題。

  1. https://stackoverflow.com/questions/24134964/issue-with-camera-picture-taken-snapshot-using-surfaceview-in-android
  2. Facing issue to take a screenshot while recording a video
  3. Take camera screenshot while recording - Like in Galaxy S3?
  4. Taking screen shot of a SurfaceView in android
  5. Get screenshot of surfaceView in Android(這是正確的答案,但部分答案。我已經問@sajar解釋答案)

Internet上的其他資源:
1. http://www.coderanch.com/t/622613/Android/Mobile/capture-screenshot-simple-animation-project 2. http://www.phonesdevelopers.com/1795894/

這都不是迄今爲我工作。我也知道我們需要創建一些與Surface Holder交互並從中獲取位圖的Thread。但我不知道如何實現。

任何幫助都得到高度評價。

+1

上帝今天寄給我你。感謝這個問題 – 2015-12-04 13:19:25

+0

..我的快樂:) – 2015-12-30 19:00:54

+0

你能找出解決這個問題的辦法嗎? – Sheharyar 2016-02-08 11:21:25

回答

6

這是另一個:Take screenshot of SurfaceView

SurfaceViews有一個「表面」部分和一個「視圖」部分;您的代碼嘗試捕獲「視圖」部分。 「表面」部分是一個單獨的層,並沒有微不足道的「抓住所有像素」的方法。基本的難點在於你的應用程序位於表面的「製作者」一側,而不是「消費者」一側,因此讀取像素時出現問題。請注意,底層緩衝區以數據製作者最方便的格式存儲,因此對於相機預覽,它將成爲YUV緩衝區。

「捕捉」表面像素的最簡單和最有效的方法是繪製兩次,一次用於屏幕,一次用於捕捉。如果你使用OpenGL ES來做到這一點,那麼YUV到RGB的轉換可能會由硬件模塊來完成,這將比在YUV緩衝區中接收相機幀並進行自己的轉換要快得多。

Grafika's「來自相機的紋理」活動演示了使用GLES處理傳入視頻數據的過程。渲染後,您可以獲得glReadPixels()的像素。設備和不同用例之間的glReadPixels()的性能可能會有很大差異。 EglSurfaceBase#saveFrame()顯示如何捕獲到Bitmap並另存爲PNG。

有關Android圖形體系結構的更多信息,特別是SurfaceView表面的生產者 - 消費者性質,可以在this document中找到。

+0

感謝這個輝煌的迴應=)Grafika是一個偉大的學習項目。 – 2014-10-13 10:02:43

+0

我無法找到'glReadPixels()'方法在相同的Activity'Texture'中的方法嗎? – 2014-10-13 10:05:18

+0

''在'EglSurfaceBase#saveFrame()'中調用'glReadPixels()'。請參閱https://github.com/google/grafika/blob/master/src/com/android/grafika/gles/EglSurfaceBase.java#L157 – fadden 2014-10-13 14:34:55

相關問題