java - onPreviewFrame 未被调用

标签 java android camera

我有以下方法来打开面向用户的相机:

    CameraOperations.java

    private Parameters parameters = null;
    private Camera cam = null;
    private Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
    private static int camNumber = Camera.getNumberOfCameras();

    public Camera toggleFaceCamera(){

        if(cam == null){
            for(int counter = 0; counter < camNumber; counter++){
                Camera.getCameraInfo(counter, cameraInfo);
                if(cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT){
                    try{
                        cam = Camera.open(counter);
                        parameters = cam.getParameters();
                        parameters.setPreviewFormat(16);
                        return cam;
                    }catch(RuntimeException e){return null;}
                }
            }
        }else{cam.release();}

        return null;

    }

    public void onPreviewFrame(byte[] data, Camera cam){
            Debug.out("teste");
        }

同样被称为:

MainActivity.java

surface = (SurfaceView)findViewById(R.id.cameraView);
            holder = surface.getHolder();

            Camera cam = CameraOperations.toggleFaceCamera();

            try{
                cam.setPreviewDisplay(holder);
                //cam.setPreviewCallback(CameraOperations.());
            }catch(IOException e){
                e.printStackTrace();
            }

            cam.startPreview();

所有这些工作正常,相机显示正确

不幸的是 onPreviewFrame 没有被调用。我已经使用 setPreviewCallback 和 setPreviewCallbackWithBuffer 尝试了几件事,但老实说,我不明白为什么这不起作用,因为 onPreviewFrame 应该与帧的显示一起调用......我已经阅读了文档,但我觉得有点被误导了这有效,如果有人能让我清楚地理解它,我将非常感激! (我尝试过的例子)

(...)
           try{
                        cam = Camera.open(counter);
                        parameters = cam.getParameters();
                        parameters.setPreviewFormat(16);
                        cam.setPreviewCallback(onPreviewFrame);   <---- doens't recognize argument
                        return cam;
                    }catch(RuntimeException e){return null;}
(...)

最佳答案

要使用的调用命令的语法

cam.setPreviewCallback(this);

来自CameraOperations类内部。

要获得预览回调,您必须调用

cam.startPreview();

如果您希望使用您的参数(例如在更改预览格式后),您需要

cam.setParameters(parameters);

通常,您需要在startPreview()之前设置参数。

关于java - onPreviewFrame 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24558093/

相关文章:

java - 如何从Dom解析转换为SAX解析

java - 如何使用BufferedReader进行本地化?

java - Web 框架应该是 Filter 还是 Servlet?

android - 从 surfaceView android 获取 JPG 文件

linux-kernel - linux在哪里调用摄像头驱动进行图片传输

java - 有哪些可能的方法来存储登录详细信息以创建站点管理员?

android - 正在运行 Android Marketplace Crawler ('hg' 目录?)

android - 需要一个动画来在 android 中缓慢移动单行文本

java - 是否有任何查询可以查找 Firebase 数据库(Android Studio)中同名子项的数量总和?

iphone - 单击 iPhone 应用程序中的表格 View 单元格打开相机