2010-09-26 5 views
2

J'essaye de convertir mon SurfaceView (aperçu de caméra) en bitmap pour la détection de visage à la volée. Je reçois une image non nulle mais quand je l'affiche sur une vue, il semble être noir. Des idées quelle pourrait être la raison et comment procéder?SurfaceView to Bitmap

(je crois qu'il est difficile, mais pas impossible d'extraire le bitmap d'un SurfaceView - mais personne n'a posté de solution)

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

a u obtenu une solution, j'obtenir aussi l'image ordinaire en blanc. – CoDe

Répondre

1

Je l'ai à travailler avec l'aide de la PreviewCallback:

onPreviewFrame public void (octet [] de _data, _camera Camera) {

// data = byte array of the camera preview 

}

+2

pourriez-vous fournir un code complet? –

+0

J'aimerais voir cela aussi, s'il vous plaît. –

0

Je vais avoir un problème similaire en essayant d'obtenir les images vidéo à partir d'un VideoView. J'ai essayé toutes sortes de combinaisons de ces drapeaux:

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

... (plus tard dans une autre vue boucle de tirage())

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

Mais l'image bitmap "de curFrame", même si pas null, a une largeur et une hauteur de -1 dans le débogueur. Cela peut être une sorte d'implémentation de DRM ou quelque chose, ou juste une limitation du décodeur, mais je ne pense pas qu'il soit possible d'obtenir les pixels vidéo. Vous avez peut-être plus de chance avec votre caméra - avez-vous essayé de jouer avec setWillNotCacheDrawing()? Faites-moi savoir si cela fonctionne parce que c'était mon plan de repli!

0

Cela peut aider aussi:

La bibliothèque Ketai offre une belle classe de caméra/grabber qui résume tout le bazar pour vous, même si elle utilise Processing.org pour Android. Voici le code si vous voulez voir comment ils le font:

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

h-t-t-p -: -/-/processingandroid.org/Ketai

Questions connexes