我正在尝试将SurfaceView(相机预览)转换为Bitmap,以便即时进行面部检测。我收到的是非空图像,但当我将其显示在视图上时,它看起来是纯黑色的。可能是什么原因以及如何进行?
(我认为从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 :(得分:2)
我使用了PreviewCallback:
public void onPreviewFrame(byte [] _data,Camera _camera){
// data = byte array of the camera preview
}
答案 1 :(得分: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()?让我知道它是否有效,因为这是我的后备计划!