2

如何在 Android 上修改实时摄像头视图?

我正在搜索并发现这个应用程序https://play.google.com/store/apps/details?id=com.fingersoft.cartooncamera是我想做的一个很好的例子。我也想对我的相机视图应用一些效果。我需要找到一种方法来添加一些效果或在我的相机视图上绘制一些东西。

据我了解,我必须获取一些视频流,应用一些更改并在相机视图中显示。

有任何想法吗?

非常感谢!

4

1 回答 1

2

您可以在这篇文章中找到有关此主题Android-Camera Preview的更多信息。另一种方法是使用OpenCV

我能想到的获取图像并在屏幕上预览的最小代码如下所示:

public class MainActivity extends Activity implements Callback {

    Camera camera;
    SurfaceView surfaceView;
    SurfaceHolder holder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        surfaceView = (SurfaceView) findViewById(R.id.surfaceView1);
    }

    @Override
    protected void onResume() {
        super.onResume();
        camera = Camera.open();
        Camera.Parameters parameters = camera.getParameters();
        parameters.setPictureFormat(ImageFormat.JPEG);
        camera.setParameters(parameters);

        holder = surfaceView.getHolder();
        holder.addCallback(this);

        camera.setPreviewCallback(new PreviewCallback() {
            public void onPreviewFrame(byte[] data, Camera camera) {
                // You could apply some pixel operations directly here.
                Log.d("Camera", "Camera image aquired");
            }
        });
    }

    @Override
    protected void onPause() {
        super.onPause();
        camera.stopPreview();
        camera.release();
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        try {
            camera.setPreviewDisplay(holder);
        } catch (IOException e) {
            e.printStackTrace();
        }
        camera.startPreview();
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
    }
}

可以在GitHub 上找到执行此操作的完整示例。

于 2013-06-11T05:26:45.383 回答