恢复活动时,在表面视图中捕获的静止图像被实时摄像机重置

Posted

技术标签:

【中文标题】恢复活动时,在表面视图中捕获的静止图像被实时摄像机重置【英文标题】:Captured still image in the surface view is getting reset by live camera when resuming the activity 【发布时间】:2020-12-21 11:36:45 【问题描述】:

我正在使用自定义表面视图来捕获 android 中的图像。单击图像后,我需要使用 Retake、Use Photo 按钮选项预览捕获的图像。在此之前一切正常。

当我锁定和解锁屏幕时,由于在 onResume 中调用了 camera.startPreview(),实时摄像头会重置此捕获的图像预览。如果从 onResume 中移除此方法调用,则只能看到黑屏。

这是我在 onResume 上的代码

   @Override
protected void onResume() 
    super.onResume();
    if (camera == null) 
        initializeCamera();
     else 
            try 
                camera.startPreview();
             catch (Exception e) 
                Log.e(TAG, e.getMessage(), e);
            
    
    sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
    sensorManager.registerListener(this, magneticField, SensorManager.SENSOR_DELAY_NORMAL);

这是surfaceCreated方法

@Override
public void surfaceCreated(SurfaceHolder holder) 
    try 
        surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        camera.setPreviewDisplay(surfaceView.getHolder());
     catch (Exception e) 
        Log.e(TAG, e.getMessage(), e);
    

有没有办法在 Surface onresume 中保留最后捕获的图​​像?

【问题讨论】:

【参考方案1】:

我用它来保存屏幕上捕获的图像

//you can omit this as in onresume() you re initialise your camera if null
yourCameraSurfaceView.yourCamera=null;

//remove Callback from holder when you capture the image
yourCameraSurfaceView.yourHolder.removeCallback(yourCameraSurfaceView);

【讨论】:

我在捕获图像后删除了回调 - surfaceView.getHolder().removeCallback(CameraActivity.this);.. 仍然捕获的图像在 onresume 上消失了 然后可以在onresume()中写一个开始预览的条件,如果已经抓到了,这种情况下不需要开始相机预览,抱歉兄弟回复晚了

以上是关于恢复活动时,在表面视图中捕获的静止图像被实时摄像机重置的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationController 的背景图像在视图控制器被推送或弹出时保持静止并且不动画

如何从 android 的视频视图中显示的 ip 摄像头的流式视频中捕获图像

从网络摄像机捕获实时图像

在 .Net Core 2.0 中从网络摄像头捕获图像

如何在我的活动中捕获图像并保存在图像视图中?

从相机捕获的图像被视为 ImageView 对象的问题。 - 安卓