【问题标题】:Use Android Camera without surface View使用没有表面视图的 Android 相机
【发布时间】:2011-04-26 10:27:53
【问题描述】:

我正在android上开发,我想用相机做一些事情(处理像素的值),但只是在后台,是否可以在没有表面视图的情况下做到这一点?只需使用缓冲区来读取像素的值并进行处理。 感谢每一位可以帮助我的人

【问题讨论】:

    标签: android


    【解决方案1】:

    从 API 级别 11 开始,添加了 SurfaceTexture。有了它,不再需要 SurfaceView。我用我的三星 Galaxy S3 Neo 测试了以下代码。

    mCamera = Camera.open();
    try {
        mCamera.setPreviewTexture(new SurfaceTexture(10));
    } catch (IOException e1) {
        Log.e(Version.APP_ID, e1.getMessage());
    }
    
    Parameters params = mCamera.getParameters();
    params.setPreviewSize(640, 480);
    params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
    params.setPictureFormat(ImageFormat.JPEG);
    mCamera.setParameters(params);
    mCamera.startPreview();
    mCamera.takePicture(null, null, null, new PictureCallback() {
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
            Log.i(Version.APP_ID, "picture-taken");
        }
    });
    

    【讨论】:

    • new SurfaceTexture(10) 中的10 是什么?我们可以使用任何数字吗? 10 特殊吗?您之前是否按照文档命令生成了具有该 ID 的纹理?这比使用SurfaceView 更好吗?
    【解决方案2】:

    我一直在寻找这个问题的答案。我在那里找到的,为方便起见,复制到这里。

    http://handycodeworks.com/?p=19

    基本上,让我们创建一个虚拟的 SurfaceView(它甚至可以在服务内部工作),并将其用于相机功能。

    SurfaceView view = new SurfaceView(this);
    c.setPreviewDisplay(view.getHolder());
    c.startPreview();
    c.takePicture(shutterCallback, rawPictureCallback, jpegPictureCallback);
    

    【讨论】:

    • 这适用于哪些设备?我测试过的所有使用此代码的设备都会导致“E/CameraHAL(132):配置旋转时出错”
    • 测试于:Galaxy i5800 (2.2)、HTC Wildfire (2.1?) - 不久前 :)
    • 我做了更多的研究,显然三星在这方面是一个真正的坚持者,我的测试设备都是三星......
    • 它确实仍然适用于三星 Galaxy i5800 - 刚刚测试了一个我必须使用此功能的特殊用途应用程序。
    • 哦,那很酷。我读到的笔记是三星通常是症结所在。我的 Galaxy Nexus 没有处理它。 Android-Segmentation ftl.
    猜你喜欢
    • 2012-05-15
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多