修改实时摄像机视图

时间:2012-12-12 18:46:18

标签: android android-camera

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

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

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

有什么想法吗?

非常感谢!

1 个答案:

答案 0 :(得分:2)

您可以在Android - Camera Previewpost中找到有关此主题的更多信息。 另一种方法是使用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上找到执行此操作的完整示例。