2010-09-26 71 views
2

我正嘗試將我的SurfaceView(相機預覽)轉換爲位圖以便在飛行中進行人臉檢測。我收到一張非空圖像,但是當我將它顯示在視圖上時,它看起來很純黑。任何想法可能是什麼原因以及如何進行?SurfaceView到位圖

(我相信這是困難,但不是不可能從SurfaceView提取位圖 - 但沒有人發佈任何解決方案)

class BackgroundView extends SurfaceView implements SurfaceHolder.Callback { 


     public BackgroundView(Context context) { 
      super(context); 

        // ... 

      setDrawingCacheEnabled(true); 
     } 


     // ... 
    } 

    private Runnable update = new Runnable() { 
     public void run() { 

        // Following statement is sending a black/blank image 
      faceView.updateFaces(backgroundView.getDrawingCache()); 
      mHandler.postDelayed(update, (long) (1000)); 
     } 
    }; 
+0

做ü有任何解決方案,我也越來越普通的空白圖像。 – CoDe 2012-08-13 07:05:57

回答

1

我得到了它使用的PreviewCallback工作:

公共無效onPreviewFrame(字節[] _data,相機_camera){

// data = byte array of the camera preview 

}

+2

你能提供完整的代碼嗎? – 2012-04-21 23:03:03

+0

我也想看看這個。 – 2013-02-25 11:40:54

0

我有一個類似的問題,試圖從一個視頻幀VideoView。我已經試過各種這些標誌的組合:

vids[i] = new VideoView(this); 
    vids[i].setDrawingCacheEnabled(true); 
    vids[i].setWillNotCacheDrawing(false); 
    vids[i].setWillNotDraw(false); 

...(後來在另一個View的抽籤()循環)

curFrame = vids[0].getDrawingCache(); 
if (curFrame != null) { 
    canvas.drawBitmap(curFrame, null, new RectF(10,y,50,y+50), null); 
} 

但「當前幀」位圖圖像,即使不null,調試器中的寬度和高度爲-1。它可能是某種類型的DRM實現或其他內容,或者僅僅是解碼器的限制,但我不認爲有可能獲得視頻像素。你可能有更好的運氣與你的相機 - 你有沒有嘗試玩setWillNotCacheDrawing()?讓我知道它是否有效,因爲這是我的後備計劃!

0

這可能會有所幫助:

Ketai圖書館提供了一個不錯的相機/抓取類,它爲你包裝了所有的垃圾,儘管它使用了Processing.org for Android。下面的代碼,如果你想看看他們是如何做到這一點:

http://ketai.googlecode.com/svn/trunk

H-T形-P - : -/-/processingandroid.org/Ketai