我正在尝试使用Google的Camera2 API示例代码绘制表面视图。但由于某些原因,相机预览开始后绘图消失。我真的很困惑为什么会这样。
private void drawonSurfaceView(){
Paint paint = new Paint();
SurfaceHolder surfaceHolder= mOverlay.getHolder();
if(surfaceHolder.getSurface().isValid()) {
Canvas canvas = surfaceHolder.lockCanvas();
//... actual drawing on canvas
paint.setStyle(Paint.Style.FILL);
int x = canvas.getWidth();
int y = canvas.getHeight();
paint.setColor(Color.GREEN);
paint.setStyle(Paint.Style.STROKE);
Rect rect = new Rect(50, 50, x-300, y-300);
canvas.drawRect(rect, paint );
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
我已将代码放在setUpCameraOutputs()方法中。
答案 0 :(得分:1)
这是真的,您无法锁定预览曲面的画布以进行绘制。不久前,用于相机预览的SurfaceView需要特殊设置(参见 What does SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS means? ),但自API 11以来,这种情况会自动发生。
您始终可以在相机预览上方的透明视图上绘图,但这不是推荐的解决方案。更好的是,将SurfaceTexture用于您的相机直播流,并在包含该纹理的2D虚拟世界中使用OpenGL进行绘制。要使图形与摄像机流同步,您应该隐藏预览纹理并使用用于提供图像处理算法的相同回调自己绘制摄像机帧。