3 votes

Vue de surface en Bitmap

Je suis en train de convertir ma SurfaceView (aperçu de la caméra) en Bitmap pour la détection de visage en temps réel. Je reçois une image non nulle mais lorsque je l'affiche sur une vue, elle apparaît en noir. Des idées sur la raison et comment procéder ?

(Je crois que c'est difficile mais pas impossible d'extraire le bitmap d'une 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() {

                    // L'instruction suivante envoie une image noire/vide
            faceView.updateFaces(backgroundView.getDrawingCache());
            mHandler.postDelayed(update, (long) (1000));
        }
    };

2voto

Sameer Segal Points 6268

J'ai réussi à le faire fonctionner en utilisant le PreviewCallback :

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

    // data = tableau de byte de l'aperçu de la caméra

}

0voto

phreakhead Points 2265

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

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

... (plus tard dans la boucle draw() d'une autre vue)

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

Mais l'image bitmap "curFrame", bien que non nulle, a une largeur et une hauteur de -1 dans le débogueur. Il peut s'agir d'une sorte d'implémentation du DRM ou quelque chose du genre, ou juste une limitation du décodeur, mais je ne pense pas qu'il soit possible d'obtenir les pixels vidéo. Vous pourriez avoir plus de chance avec votre caméra - avez-vous essayé de jouer avec setWillNotCacheDrawing()? Faites-moi savoir si ça marche car c'était mon plan de secours!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X