3

SurfaceView(カメラプレビュー)をその場で顔検出用のビットマップに変換しようとしています。null以外の画像を受信して​​いますが、ビューに表示すると、真っ黒に見えます。理由は何で、どのように進めるかについてのアイデアはありますか?

(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));
        }
    };
4

2 に答える 2

2

PreviewCallbackを使用して動作するようになりました:

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

    // data = byte array of the camera preview

}

于 2010-10-12T12:27:25.583 に答える
0

VideoViewからビデオフレームを取得しようとすると、同様の問題が発生します。私はこれらのフラグのあらゆる種類の組み合わせを試しました:

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

...(後で別のビューのdraw()ループで)

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

ただし、「curFrame」ビットマップイメージは、nullでなくても、デバッガーでの幅と高さが-1になります。なんらかのDRM実装か何か、あるいはデコーダーの制限かもしれませんが、ビデオピクセルを取得することは不可能だと思います。あなたはあなたのカメラでより幸運があるかもしれません-あなたはsetWillNotCacheDrawing()で遊んでみましたか?それが私のフォールバックプランだったので、うまくいくかどうか教えてください!

于 2010-10-12T10:39:09.463 に答える