SurfaceView转换为位图

3
我正在尝试将我的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));
        }
    };

你有找到任何解决办法吗?我也遇到了空白图片的问题。 - CoDe
2个回答

2
我使用PreviewCallback解决了这个问题: public void onPreviewFrame(byte[] _data, Camera _camera) {
    // data = byte array of the camera preview

}


我也想看,请提供。 - Andrew Wyld

0

我遇到了一个类似的问题,尝试从VideoView中获取视频帧。我已经尝试了各种组合的标志:

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

稍后在另一个View的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()来玩一下您的相机,也许会有更好的运气。如果它有效,请告诉我,因为那是我的备选计划!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接