使用没有表面视图的Android相机

use*_*115 9 android

我正在开发android,我想用相机做一些事情(处理像素的值),但只是在背景中,是否可以在没有表面视图的情况下进行?只需使用缓冲区读取像素的值并进行处理.谢谢每个人都可以帮助我

Jak*_*ler 5

从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");
    }
});
Run Code Online (Sandbox Code Playgroud)

  • “new SurfaceTexture(10)”中的“10”是什么?我们可以使用任何数字吗?`10` 很特别吗?您之前是否按照文档命令生成了具有该 ID 的纹理?这比使用“SurfaceView”更好吗? (2认同)

qdo*_*dot 4

我一直在寻找这个问题的答案有一段时间了。我在那里找到的,为了方便复制在这里。

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

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

SurfaceView view = new SurfaceView(this);
c.setPreviewDisplay(view.getHolder());
c.startPreview();
c.takePicture(shutterCallback, rawPictureCallback, jpegPictureCallback);
Run Code Online (Sandbox Code Playgroud)