如何在Android中获取相机屏幕?

时间:2014-07-31 01:34:39

标签: android camera android-camera

在我的Android应用程序中,我正在尝试进行一些图像识别,我想打开相机并在拍照之前看到相机生成的图像,比如相机浏览模式。

基本上,当您浏览时,我想连续抓取当前屏幕,然后读取它并生成一些对象以更新屏幕上的某些文本。像这样的东西

@Override
// this gets called every 5 seconds while in camera browse mode. bitmap is the image of the camera currently
public void getScreen(Bitmap bitmap) {
    MyData data = myalgorithm(bitmap);
    displayCountOnScreen(data);
}

我看到了这个应用https://play.google.com/store/apps/details?id=com.fingersoft.cartooncamera&hl=en

在相机浏览模式下,他们更改屏幕并在屏幕上放置其他一些GUI内容。我也想这样做。

任何人都知道我该怎么做?

由于

1 个答案:

答案 0 :(得分:0)

如果您只想在屏幕上放置一些GUI元素,则无需将所有预览帧作为位图获取(如果您愿意,也可以这样做):

使用SurfaceView创建一个布局,用于显示视频数据的位置,然后将其他视图放在最上面。

在onCreate中,您可以这样:

    surfaceView = (SurfaceView)findViewById(R.id.cameraSurfaceView);
    surfaceHolder = surfaceView.getHolder();
    surfaceHolder.addCallback(this);  // For when you need to know when it changes.
    surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

创建相机时,需要将其传递给Surface以显示预览,请参阅: http://developer.android.com/reference/android/hardware/Camera.html#setPreviewDisplay(android.view.SurfaceHolder)

    Camera camera  = ...        
    ...
    camera.setPreviewDisplay(surfaceHolder);
    camera.startPreview();

如果要进行图像识别,您需要的是要处理的原始图像字节。在这种情况下,请注册PreviewCallback,请参见此处:

http://developer.android.com/reference/android/hardware/Camera.html#setPreviewCallbackWithBuffer(android.hardware.Camera.PreviewCallback)